【发布时间】:2021-08-04 21:35:16
【问题描述】:
为令人困惑的标题道歉。我想使用条件 awk 语句处理柱状文件。基本上,如果在第 2 列中找到数字 27606,我想打印 length($4)-length($5),否则如果在第 2 列中找不到 27606,我想打印一次“0”。
考虑present.txt:
First 11111 Third ABCDE A
First 27606 Third ABCDE A
First 22222 Third ABCDE A
First 33333 Third ABCDE A
First 44444 Third ABCDE A
和absent.txt:
First 11111 Third ABCDE A
First 55555 Third ABCDE A
First 22222 Third ABCDE A
First 33333 Third ABCDE A
First 44444 Third ABCDE A
对于present.txt,输出应该是:4。
对于absent.txt,输出应该是:0。
我尝试了以下方法:
awk '{if ($2 ~ /27606/){print length($4)-length($5)} else { print "0" }}' file
通过为present.txt 打印“4”以我想要的方式“工作”,然而它为 每一行打印 0,其中没有 27606 absent.txt... 中的第 2 列输出:
0
0
0
0
0
我也试过了:
awk '$2 ~ /27606/ {found=1} END {if (!found) print "0"} {if (found) print length($4)-length($5)}' file
这适用于absent.txt:“0”只打印一次。然而,对于present.txt,length($4)-length($5) 将打印在 $2 列中匹配 27606 的第一行以及随后的每一行。输出:
4
4
4
4
我可以使用什么命令使present.txt 的输出为'4',而absent.txt 的输出为'0'?谢谢!
【问题讨论】:
标签: awk