打印和匹配两个列在两个文件之间匹配的行

时间:2018-02-01 15:43:50

标签: unix awk match

我希望将文件for_matching中的第1列和第2列与路径中不同目录中的文件相匹配,并命名为 / .file并打印与这些列匹配的整行

/ .file(示例)

carrot 124555 1 2 6
hair 9922 2 2 2
tree 2223 2 1 2

for_matching

carrot 124555

输出

carrot 124555 1 2 6

现在我可以在两者之间匹配第1列。

for i in */*.file; do awk -F, 'FNR==NR {a[$1]=$0; next}; $1 in a {print a[$1]}' $i for_matching > $i.matched; done

2 个答案:

答案 0 :(得分:2)

使用awk

awk 'FNR==NR{arr[$1,$2];next}(($1,$2) in arr)' for_matching file

测试结果:

$ cat file
carrot 124555 1 2 6
hair 9922 2 2 2
tree 2223 2 1 2

$ cat for_matching 
carrot 124555

$ awk 'FNR==NR{arr[$1,$2];next}(($1,$2) in arr)' for_matching file
carrot 124555 1 2 6

与多个文件相同,不需要ls */*.file

#!/usr/bin/env bash

for i in */*.file; do
    awk 'FNR==NR{arr[$1,$2];next}(($1,$2) in arr)' for_matching "$i" >"$i.matched"
done

答案 1 :(得分:1)

这很简单,你可以:

my_process.stdin.write("fs")

有关限制,请参阅下面的@ karakfa评论。

当然可以通过(:

来规避
$ grep -F -w -f for_matching file
carrot 124555 1 2 6