Bal*_*ala 3 linux awk text-processing
我有一个管道分隔的文件,如下所示
TEST|RALPH|JACKSON|2|3|1
TEST|STEVE|PARKER|0|1|1
TEST|MARK|WOODS|0|1|1
TEST|DAVE|KNIGHT|1|3|1
TEST|JOHN|DOE|0|1|1
Run Code Online (Sandbox Code Playgroud)
我想过滤第 4,5 和 6 列中具有非零值的行,并将其写入单独的文件中。
预期产出
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下 awk 实现此目的
awk -F "|" '$4 != 0 && $5 !=0 && $6 !=0' input.txt > output.txt
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法使用 awk 来做到这一点。
你目前的方法是正确的、清晰的,并且按照宣传的那样工作,没有真正需要改变它。
但是,如果您想测试更多的列,例如第 3 列之后的所有列,这可能会导致awk程序有点长(如果有很多列)。
另一种方法是使用循环:
$ awk -F '|' '{ for (i=4; i<=NF; ++i) if ($i == 0) next; print }' file
TEST|RALPH|JACKSON|2|3|1
TEST|DAVE|KNIGHT|1|3|1
Run Code Online (Sandbox Code Playgroud)
该awk程序测试第 3 列之后的所有列的值,并在找到值为 0 的列时立即跳过当前行。如果没有找到零,则打印当前行。