【问题标题】:Insert rows using awk使用 awk 插入行
【发布时间】:2022-01-11 10:55:47
【问题描述】:

如何使用 awk 插入一行?

我的文件如下所示:

1       43
2       34
3       65
4       75

我想插入三行“?”所以我的愿望文件看起来像:

1       ?
2       ?
3       ?
4       43
5       34
6       65
7       75

我正在尝试使用以下脚本。

awk '{if(NR<=3){print "NR        ?"}} {printf" " NR      $2}' file.txt

【问题讨论】:

    标签: shell awk


    【解决方案1】:

    这是一种方法:

    $ awk 'BEGIN{s="       "; for(c=1; c<4; c++) print c s "?"}
           {print c s $2; c++}' ip.txt 
    1       ?
    2       ?
    3       ?
    4       43
    5       34
    6       65
    7       75
    

    【讨论】:

      【解决方案2】:
      $ awk 'BEGIN {printf "1 ?\n2 ?\n3 ?\n"} {printf "%d", $1 + 3; printf " %s\n", $2}' file.txt
      1 ?
      2 ?
      3 ?
      4 43
      5 34
      6 65
      7 75
      

      【讨论】:

        【解决方案3】:

        您也可以在 awk 之前添加 3 行,例如:

        { seq 3; cat file.txt; } | awk 'NR <= 3 { $2 = "?" } $1 = NR' OFS='\t'
        

        输出:

        1       ?
        2       ?
        3       ?
        4       43
        5       34
        6       65
        7       75
        

        【讨论】:

          【解决方案4】:

          我会按照使用 GNU AWK 的方式来做,让 file.txt 内容成为

          1       43
          2       34
          3       65
          4       75
          

          然后

          awk 'BEGIN{OFS="       "}NR==1{print 1,"?";print 2,"?";print 3,"?"}{print NR+3,$2}' file.txt
          

          输出

          1       ?
          2       ?
          3       ?
          4       43
          5       34
          6       65
          7       75
          

          说明:我将输出字段分隔符(OFS)设置为 7 个空格。对于第一行,我打印了三行,其中包含后续数字和?,由输出字段分隔符剪切。您可能会选择使用for 循环来执行此操作,特别是如果您希望此处的要求可能会发生变化。对于每一行,我打印行数加 4(以保持顺序)和第二列($2)。由于使用了 OFS,如果有关空间数量的要求发生变化,您只需进行一项更改。请注意,像

          这样的构造
          {if(condition){dosomething}}
          

          可以用更简洁的方式写成GNU AWK

          (condition){dosomething}
          

          (在 gawk 4.2.1 中测试)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-09-26
            • 2017-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-06
            • 1970-01-01
            相关资源
            最近更新 更多