带偏移的 Linux 头/尾

Posted

技术标签:

【中文标题】带偏移的 Linux 头/尾【英文标题】:Linux head/tail with offset 【发布时间】:2014-10-07 12:20:12 【问题描述】:

在 Linux 中有没有一种方法可以请求头部或尾部,但需要忽略额外的记录偏移量。

例如,如果文件example.lst 包含以下内容:

row01
row02
row03
row04
row05

我使用 head -n3 example.lst 可以获得第 1 - 3 行,但如果我希望它跳过第一行并获得第 2 - 4 行怎么办?

我问是因为某些命令的标题可能在搜索结果中并不理想。例如du -h ~ --max-depth 1 | sort -rh 将返回主目录中所有文件夹的目录大小,按降序排序,但会将当前目录附加到结果集的顶部(即~)。

Head 和 Tail 手册页似乎没有任何偏移参数,所以也许有某种range 命令可以指定所需的行:例如range 2-10 什么的?

【问题讨论】:

【参考方案1】:

来自man tail

   -n, --lines=K
        output the last K lines, instead of the last 10; 
        or use -n +K to output lines starting with the Kth

因此,您可以使用 ... | tail -n +2 | head -n 3 从第 2 行开始获取 3 行。

非头/尾方法包括sed -n "2,4p"awk "NR >= 2 && NR <= 4"

【讨论】:

+1 你也可以awk 'NR>4exitNR>=2' 在第四行之后退出。 wtf 这个答案毫无意义——我们如何使用headtail 来获取范围。我希望这个答案中有一个例子,比如tail -n 5 -l 5 第一个选项是从哪里开始第二个是多少 @MrCholo 答案解释了如何,但如果不清楚,你可以给我一个行范围,我会给你头+尾组合来提取它 好吧,我知道如果你这样做:tail -n 10 | head -n 5,它将读取“倒数第二组 5”,但是,想象一个更大的数字。 tail -n 1000 | head -n 5,现在它必须读取 1000 条速度较慢的东西。我正在寻找一个可以执行此操作且仅读取 5 行的命令。类似range --start '-1000' --end '-1005',注意负数 文件不可行寻址。如果您想按行号访问行而不从头或尾读取文件,则必须提前索引文件,或使所有行的长度已知。【参考方案2】:

要获取 2 到 4 之间的行(包括两者),您可以使用:

head -n4 example.lst | tail -n+2

head -n4 example.lst | tail -n3

【讨论】:

【参考方案3】:

花了很多时间才最终得到这个解决方案,它似乎是唯一一个涵盖所有用例的解决方案(到目前为止):

command | tee full.log | stdbuf -i0 -o0 -e0 awk -v offset=$MAX_LINES:-200 \
          '
               if (NR <= offset) print;
               else 
                   a[NR] = $0;
                   delete a[NR-offset];
                   printf "." > "/dev/stderr"
                   
           
           END 
             print "" > "/dev/stderr";
             for(i=NR-offset+1 > offset ? NR-offset+1: offset+1 ;i<=NR;i++)
              print a[i]
           '

功能列表:

head 的实时输出(显然 tail 是不可能的) 不使用外部文件 stderr 上的进度条,MAX_LINES 之后的每一行一个点,对于长时间运行的任务非常有用。 避免由于缓冲 (stdbuf) 而导致的错误记录顺序

【讨论】:

【参考方案4】:

sed -n 2,4p somefile.txt

#填充

【讨论】:

以上是关于带偏移的 Linux 头/尾的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向ELF 文件格式 ( 程序头偏移量 | 节区头偏移量 | 处理器特定标志 | ELF 文件头大小 )

Android 逆向ELF 文件格式 ( 程序头偏移量 | 节区头偏移量 | 处理器特定标志 | ELF 文件头大小 )

jdbc PostgreSQL 中的偏移时间(带时区的时间)

带偏移的 CSS 背景渐变

为啥这个操作PE文件头的代码使用了这么奇怪的偏移值?

带偏移的变换反馈