我希望将文件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
答案 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