我有文件1
blah blah cool
fold bold match
ed ted bled
file2 as
blah ha cool
fold bold match
ed ted bled
我想仅在第二个字段不匹配时才输出行
blah ha cool
然而,相反,我得到了这个:
blah ha cool
fold bold match
ed ted bled
继承我的尝试:
$ awk -F'\t' 'NR==FNR{a[$1]=$0;next} $1 in a{split(a[$1],r); if (r[2] != 2) print $0 FS "false"; else next;}' file1 file2
我的猜测是我没有通过关联数组正确递增..
答案 0 :(得分:3)
据我了解,您希望从file2打印第二列与file1中相应行的第二列不同的行。如果是这样的话:
$ awk 'FNR==NR{a[NR]=$2; next} $2!=a[FNR]' file1 file2
blah ha cool
FNR==NR{a[NR]=$2; next}
将数组a
中file1的第二个字段的每个值保存在其行号的键下。 $2!=a[FNR]
打印file2中的任何行,第二个字段与同一行的file1的第二个字段不同。
答案 1 :(得分:2)
逐行比较,假设制表符分隔数据
$ paste file1 file2 | awk '$2!=$5'
blah blah cool blah ha cool
仅报告file2记录
$ paste file1 file2 | awk '$2!=$5' | cut -f4-
blah ha cool
此解决方案也适用于非常大的文件。