![获取第二个文件中与第一个文件中特定列的值匹配的所有行](https://linux22.com/image/156605/%E8%8E%B7%E5%8F%96%E7%AC%AC%E4%BA%8C%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E4%B8%8E%E7%AC%AC%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%89%B9%E5%AE%9A%E5%88%97%E7%9A%84%E5%80%BC%E5%8C%B9%E9%85%8D%E7%9A%84%E6%89%80%E6%9C%89%E8%A1%8C.png)
我有两个文件:
第一个文件:
ab34,ax,55,gt
ab46,56,thy,ix
ab34,tg,47,xy
at87,kl,89,th
ab46,ut,87,er
第二个文件:
x1,ab34,78,got
wq,at87,100,op
90,ab46,la,gf
预期结果:
ab34,ax,55,gt,x1,ab34,78,got
ab46,56,thy,ix,90,ab46,la,gf
ab34,tg,47,xy,x1,ab34,78,got
at87,kl,89,th,wq,at87,100,op
ab46,ut,87,er,90,ab46,la,gf
我想根据第一个文件第一列中的值来 grep 第二个文件中的行。理想的输出是打印第一个文件,其中包含与第二个文件匹配的行。我编写了简单的 unix 命令,但这对我来说有点棘手,显然需要一个循环函数。
答案1
看起来像 UNIX 命令的想法,你需要先排序:
cat 1|sort > 1.sort
cat 2|sort -t, -k2 > 2.sort
join -t, -2 2 1.sort 2.sort
我刚刚给你做作业吗?
答案2
我对您实际想要的内容做了很多假设,但这会产生您想要的示例输出。所以也许我对这个问题的解释是正确的:
awk 'NR==FNR{a[$2]=$0; next} {print $0,a[$1]}' FS=, OFS=, file2 file1