AWK比较两个文件

时间:2016-07-06 19:20:15

标签: awk

我有文件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

我的猜测是我没有通过关联数组正确递增..

2 个答案:

答案 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

此解决方案也适用于非常大的文件。