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



我有一个文件.txt是这样写的:

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

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

谢谢!

简短的

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 - 打印只有一列和下一列的行(根据需要(

我会用 grep 来做:

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

你应该能够做到这一点:

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
$ awk 'NF==1{c=2} c&&c--' file
0
0.421915 0.420615 192000
1
0.423915 0.423681 768000

有关该和更多 awk 范围习语的解释,请参阅 https://stackoverflow.com/a/17914105/1745001。

相关内容

最新更新