我有两个输入文件
文件1
123
125
123
129
和文件2
"a"|"123"|"anc"
"b"|"124"|"ind"
"c"|"123"|"su"
"d"|"122"|"aus"
输出:
"b"|"124"|"ind"
"d"|"122"|"aus"
现在我如何比较和打印file1的$ 1和file2的$ 2的差异。我的双引号有问题(")。
那么如何比较忽略双引号的差异?
答案 0 :(得分:1)
$ awk 'FNR==NR{a[$1]=1;next} a[$3]==0' file1 FS='["|]+' file2
"b"|"124"|"ind"
"d"|"122"|"aus"
工作原理:
file1 FS='["|]+' file2
这个文件列表告诉awk首先读取file1
,然后将字段分隔符更改为双引号和竖线的任意组合,然后读取file2。
FNR==NR{a[$1]=1;next}
FNR是awk从当前文件读取的行数,NR是读取的总行数。因此,FNR==NR
仅在读取第一个文件时才为真。大括号后面的命令仅对第一个文件执行。
这将创建一个关联数组a
,其键是file1
的第一个字段,其值为1. next
命令告诉awk跳过其余命令并重新开始在next
行。
a[$3]==0
只有在file1中没有出现字段3中的数字时才会出现这种情况。如果为true,则采用默认操作来打印该行。 (使用我们选择的字段分隔符,您感兴趣的数字位于字段3中。)
$ awk 'FNR==NR{a[$1]=1;next} a[substr($2,2,length($2)-2)]==0' file1 FS='|' file2
"b"|"124"|"ind"
"d"|"122"|"aus"
这与上面的类似,只是字段分隔符只是一个垂直条。在这种情况下,您感兴趣的数字在字段2中。我们使用substr
从字段2的任一端删除一个字符,这样可以删除双引号。