使用 awk 将第 2 3 行移到第 5 行之后

使用 awk 将第 2 3 行移到第 5 行之后

我的文件内容为:

this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line

awk 'NR==2 && NR==3 {f=$0;next}  NR ==5 &&f{print;print f}' awk.write

这里的问题是,f我只能保存nr==3我想将第 2 行和第 3 行移到第 5 行之后的值。

答案1

尝试:

$ awk '
  FNR == 2 { l2 = $0; next } # Save 2nd line
  FNR == 3 { l3 = $0; next } # Save 3rd line
  FNR == 5 {                 # Print 5th line, follow 2nd, 3rd
    print
    print l2
    print l3
    next
  }
  1                          # Print other lines
' <file

请注意,如果文件少于五行,您将丢失第二行和第三行。

答案2

单程:

awk 'NR==2 || NR==3{a[i++]=$0;next}1;NR==5{for(j=0;j<2;j++){print a[j];}}' file

答案3

awk 'NR == 2 || NR == 3 {l = l RS $0; next}
     NR == 5 {$0 = $0 l}
     {print}'

答案4

您需要多个变量或一个数组。使用awk

awk 'NR==2||NR==3{a[i++]=$0;next} NR==5{print;for(c=0;c<i;c++){print a[c]}next}1' file

  • NR==2||NR==3如果是2号线或3号线
    • a[i++]=$0;next填充数组a并继续。
  • NR==5如果是5号线
    • print首先打印该行。
    • for(c=0;c<i;c++){print a[c]}循环遍历数组并打印其内容。
  • 1是打印每一行的真实条件。

相关内容