我有file1
和file2
如下。我想首先根据第一列在两个文件之间找到匹配项,然后打印file1
和中的匹配行file2
。我在下面写了所需的输出
$ cat file1
1, 456, abcd, ...
23, 567, rstc, ...
45, 678, rsto, ...
$ cat file2
23, 5607, abcstc, ...
45, 28, zfgsto, ...
期望输出:
23, 567, rstc, ...
23, 5607, abcstc, ...
45, 678, rsto, ...
45, 28, zfgsto, ...
答案1
怎么样
awk -F, 'NR==FNR {a[$1]=$0;next}; $1 in a {print a[$1]; print}' file1 file2
答案2
也许uniq
首先使用来创建您想要的一组线条:
for pref in $(tail -q -n +2 *.txt | cut -d',' -f 1 | sort | uniq); do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done
演练:
使用创建一组前缀uniq
(使用跳过每个文件的第一行tail
):
for pref in $(tail -q -n +2 *.txt | cut -d',' -f 1 | sort | uniq)
对于找到的每个前缀,grep
两个文件中都包含以其开头的行,并grep
使用以下命令删除“文件匹配”报告cut
:
do grep ^${pref}"," *.txt | cut -d':' -f 2 >> test.res; done