我有两个文本文件,例如
一个
1111|100|11/11/1111|a
2222|200|11/11/1111|a
3333|300|11/11/1111|a
4444|400|11/11/1111|a
b
1111|100|11/11/1111|a
1111|100|11/11/1111|a
2222|200|11/11/1111|a
3333|300|11/11/1111|a
5555|500|11/11/1111|a
我用过下面的命令
awk -F"|" '{ printf "%4s|%3s|\n",$1,$2 }' a | grep -v -f /dev/stdin b
哪个输出....
5555|500|11/11/1111|a
预期产出是
1111|100|11/11/1111|a
5555|500|11/11/1111|a
我怎样才能做到这一点grep
或awk
grep
在这里不适合,因为它用于提取与某种形式的正则表达式匹配的单个行(实际上不用于比较文件)。它将无法返回一个匹配项并丢弃另一个匹配项(文件的前两行b
)。你可以使用
comm
:请注意,这
comm
依赖于已排序的输入数据。上面的
comm
命令-13
用于丢弃其默认输出中的第一列和第三列。默认情况下,它将输出仅在第 1 列的第一个文件中找到的行,仅在第 2 列的第二个文件中找到的行和最后一列中的公共行(请参阅comm
您系统上的手册,它是一个标准实用程序):使用 GNU awk 对数组和 ARGIND 比较任意数量的未排序文件的更通用方法:
上面显示了所有文件中的每个唯一字符串,以及给定字符串在第一个文件中出现的次数,在第二个文件中出现的次数等。
要获得您想要的输出,那么可以简单地是: