如何从两个不同的文件中打印匹配的行?

如何从两个不同的文件中打印匹配的行?

我有file1file2如下。我想首先根据第一列在两个文件之间找到匹配项,然后打印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

相关内容