【问题标题】:Deleting the first two lines of a file using BASH or awk or sed or whatever使用 BASH 或 awk 或 sed 或其他方式删除文件的前两行
【发布时间】:2012-02-10 01:51:43
【问题描述】:

我试图通过不将文件打印到另一个文件来删除文件的前两行。我不是在寻找花哨的东西。这是我对 awk 的(失败)尝试:

awk '{ (NR > 2) {print} }' myfile

抛出以下错误:

awk: { NR > 2 {print} }
awk:          ^ syntax error

例子:

“我的文件”的内容:

blah
blahsdfsj
1 
2
3
4

我想要的结果是什么:

1
2
3
4

【问题讨论】:

    标签: bash awk sed lines


    【解决方案1】:

    你快到了。试试这个:

    awk 'NR > 2 { print }' myfile
    

    awk 是基于规则的,并且规则在它通过时将执行的块之前显示为裸露(即没有大括号)。

    正如 Jaypal 所指出的,在 awk 中,如果您只想打印与规​​则匹配的行,您甚至可以省略该操作,从而将命令简化为:

    awk 'NR > 2' myfile
    

    【讨论】:

    • 他也可以在括号前加一个if,尽管你的方式更好,因为它不会参与每一行,只是那些已经匹配的行。
    • 你甚至不需要{ print }awkish 方式为awk 'NR>2' myfile
    【解决方案2】:

    awk 基于pattern{action} 语句。在您的情况下,patternNR>2,而您要执行的 actionprint。这个action 也是awkdefault action

    所以即使

    awk 'NR>2{print}' filename

    会很好,你可以把它缩短为

    awk 'NR>2' filename

    【讨论】:

      【解决方案3】:

      使用尾巴:

      tail -n+3 file
      

      来自手册页:

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

      【讨论】:

        【解决方案4】:

        怎么样:

        tail +3 file
        

        awk 'NR>2' file
        

        sed '1,2d' file
        

        【讨论】:

        • sed 的另一个变种:sed -n '3,$p' file
        猜你喜欢
        • 2012-08-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 2020-12-28
        • 2015-02-21
        • 2023-01-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多