我有一个包含标识符列表的文件,我必须从另一个文件中 grep 。我必须对一对文件(例如 100 对)执行此操作。这些文件看起来像:
A.not.txt.重复:
chr1_937201_937501
chr1_937501_937801
A.not.txt:
chr1_937201_937501 329 1
chr1_937201_937501 144 1
chr1_937501_937801 329 1
chr1_937501_937801 144 1
chr1_1875601_1875901 764 1
chr1_1875601_1875901 183 1
chr1_2246701_2247001 377 1
chr1_2246701_2247001 194 1
chr1_937201_937501 0 0
chr1_937201_937501 0 0
chr1_937501_937801 0 0
chr1_937501_937801 0 0
chr1_1875601_1875901 0 0
chr1_1875601_1875901 0 0
chr1_2246701_2247001 0 0
chr1_2246701_2247001 0 0
输出:
chr1_937201_937501 329 1
chr1_937201_937501 144 1
chr1_937501_937801 329 1
chr1_937501_937801 144 1
我知道我可以这样做:
grep -f A.not.txt.duplicated A.not.txt > A.not.txt.duplicated
但问题是我有几对,我想循环播放。
任何想法都非常感激。
答案1
使用加入
for f in *.not.txt.duplicated; do
join <(sort "$f") <(sort "${f%.duplicated}") > "$f.out"
done
如果您确实希望结果覆盖“.duplicate”文件,如示例命令中所示,请添加&& mv "$f.out" "$f"
到该行的末尾join
。