如何使用awk检测只有一个字段的行并将其与下一行一起打印?

时间:2017-05-19 10:48:32

标签: bash awk gnuplot

我用这种方式写的file.txt(没有开头的点,只是数字):

0 
0.421915 0.420615 192000
0.420397 0.420802 192000
1
0.423915 0.423681 768000
0.421658 0.421474 768000

我想只用一列和下一列。 是否可以使用awk,我该怎么做?

谢谢!

4 个答案:

答案 0 :(得分:4)

awk 方法:

awk 'NF==1 && (getline nl)>0{print $0 ORS nl}' file

输出:

0
0.421915 0.420615 192000
1
0.423915 0.423681 768000
  • NF==1 - 仅考虑包含一列的行

  • getline nl - 获取下一行并将其分配给变量nl(下一行)

  • (getline nl)>0 - getline 命令返回 1 ,如果找到记录且 0 如果遇到文件末尾

  • print $0 ORS nl - 打印仅包含一列的行 (根据需要)

答案 1 :(得分:2)

我会用grep:

来做

grep -E -A 1 "^[0-9]+$" yourfile.txt

答案 2 :(得分:0)

您应该能够:

awk 'NF==1{p=1;print$0;}NF!=1{if(p==1){print$0;p=0}}' file.txt

<强>输出

0 
0.421915 0.420615 192000
1
0.423915 0.423681 768000

答案 3 :(得分:0)

$ awk 'NF==1{c=2} c&&c--' file
0
0.421915 0.420615 192000
1
0.423915 0.423681 768000

请参阅https://stackoverflow.com/a/17914105/1745001以获取对此的解释以及更多awk范围习语。