如果第 5 列中的值可用且第 1 列和第 2 列值相等且第 3 列和第 4 列值相等,我正在尝试打印第 1 列和第 5 列。对于上述内容,我使用以下命令。
awk 'length($5) && $1=$2 && $3=$4 {print $1" "$5}' filename
下面是我的文件,内容如下
343 222 222 333 333 test
565 444 444 555 555 testi
234 121 121 454 454
345 676 676 343 343 testin
但我得到的第一列值为 1,输出如下
1 test
1 testi
1 testin
我的命令中有 3 个条件,如果我使用 2 个条件,它就可以正常工作。谁能解释一下为什么我得到的结果是 1 以及如何修复它。
答案1
=
是一个作业。用于==
比较值。你得到是1
因为你本质上拥有$1 = ($2 && $3 = $4)
。
awk 'NF == 5 && $1 == $2 && $3 == $4 { print $1, $5 }' filename
另请注意,您的数据包含 5 或 6 列,而不是 4 或 5 列,所以也许您打算使用
$ awk 'NF == 6 && $2 == $3 && $4 == $5 { print $1, $6 }' filename
343 test
565 testi
345 testin
NF
是一个awk
变量,包含当前记录中的字段数。默认输出分隔符 ( OFS
) 是空格,因此无需使用 打印显式空格print
。
另外,如果您想打印显式空格,那么这样做会更具可读性
print $1 " " $6
而不是
print $1" "$6
awk
当变量和字符串的值相继出现时,将它们连接起来。变量和字符串之间的空格并不重要。
答案2
Command: awk '{if ((length($6) >0) && ($2==$3) && ($4==$5)) {print $1,$6}}' filename
输出
veen_linux_example ~]#
awk '{if ((length($6) >0) && ($2==$3) && ($4==$5)) {print $1,$6}}' filename
343 test
565 testi
345 testin