【问题标题】:bash shell display first part of file using BSD headbash shell 使用 BSD 头显示文件的第一部分
【发布时间】:2013-09-22 06:43:59
【问题描述】:

这是文件:

line1
line2
⋮
line10
Total
Update time

我想要文件的第一部分 except 用于最后 2 行。

输出应如下所示:

line1
line2
⋮
line10

如何使用 BSD head 来实现这一点?还是其他oneliner?

谢谢!

【问题讨论】:

标签: bash shell head bsd


【解决方案1】:

使用 awk,这将打印除最后两行之外的所有行。

  awk '{a[j++]=$0}END{for(i=0;i<j-2;i++){print a[i]}}' filename

【讨论】:

  • 需要将 i=1 改为 i=0。 (:
【解决方案2】:

另一个 awk 选项:

cat <<file>> | awk -v len=$(wc -l <<file>> | awk '{print $1}') 'NR < len - 2 { print $0 }'

【讨论】:

    【解决方案3】:

    反转文件,先删除两行,再反转回来:

    tac file | sed 1,2d | tac
    

    【讨论】:

      【解决方案4】:

      这个概念不使用太多缓冲区,即使对于非常大的文件或管道中的无穷无尽的流也很有用。它应该比迄今为止提供的任何其他解决方案都要好。您也不必等到结束才开始打印行。

      awk 'BEGIN{X = 2; getline; a[NR % X] = $0; getline; a[NR % X] = $0}{print a[NR % X]; a[NR % X] = $0}'
      

      NR 也可以替换为另一个计数器,如果涉及 NR 的限制,该计数器会将自身重置为0。它还取决于 awk 的实现,它如何清理自己并在每个 N 输入行上重用内存 但这个概念已经存在。

      awk 'BEGIN{X = 2; for(i = 0; i < X; ++i)getline a[i]}{i %= X; print a[i]; a[i++] = $0}'
      

      【讨论】:

        【解决方案5】:

        类似

        head file.txt -n -2
        

        应该可以工作,前提是您的 head 版本允许 -2 参数。我的 GNU 版本的 head 工作

        $头--版本 头(GNU coreutils)5.97 版权所有 (C) 2006 Free Software Foundation, Inc. 这是免费软件。您可以根据以下条款重新分发它的副本 GNU 通用公共许可证。 在法律允许的范围内,不提供任何保证。 由大卫麦肯齐和吉姆迈耶林撰写。

        【讨论】:

          【解决方案6】:

          这可能对你有用:

          [root@gc-rhel6-x64 playground]# cat 文件
          第1行
          第2行
          第3行
          第4行
          第 5 行
          第6行
          第 7 行
          第8行
          第9行
          第10行

          [root@gc-rhel6-x64 playground]# head -`expr \`wc -l &lt; file\` - 2` file
          第1行
          第2行
          第3行
          第4行
          第 5 行
          第6行
          第 7 行
          第8行

          【讨论】:

          • 使用$() 代替反引号:head -$(expr $(wc -l &lt; file) - 2) file
          • 谢谢@glennjackman!你的方式肯定更具可读性:)
          【解决方案7】:

          这将得到文件 except 最后 2

          cat file.txt | head -$(expr $(wc -l file.txt | cut -c-8) - 2)

          修改粗体部分。

          【讨论】:

            猜你喜欢
            • 2016-06-24
            • 1970-01-01
            • 1970-01-01
            • 2014-01-30
            • 2012-02-24
            • 1970-01-01
            • 2019-11-13
            • 2013-12-16
            • 2015-09-23
            相关资源
            最近更新 更多