我有两个文件,table1.txt 和 table2.txt,第一列都包含字符 chr1、chr2、chr3。我想迭代一个命令,以便它从两个表中 greps 只包含 chr1、chr2、chr3 之一的行,并将表的这个子集(比如所有带有 chr1 的行)传递给另一个命令(比如 cat,它接受两个表作为输入)。然后将输出保存为文件(例如 new_chr1.txt 用于对 chr1 行进行操作)。
以下是两个表的虚拟表示:
表1.txt:
chr1 5 55 1
chr1 14 62 1
chr1 47 97 1
chr2 4 52 1
chr2 20 70 1
chr2 25 75 1
chr3 3 52 1
chr3 6 56 1
chr3 10 60 1
表2.txt:
chr1 0 199
chr1 200 399
chr1 400 599
chr2 600 799
chr2 800 999
chr2 1000 1199
chr3 1200 1399
chr3 1400 1599
chr3 1600 1799
我尝试了以下代码:
for i in chr1 chr2 chr3
mkfifo table1
mkfifo table2
grep -w $i table1.txt > table1 &
grep -w $i table2.txt > table2 &
cat table1 table2 > new_$i.txt
done
以下是从我的屏幕复制的,以显示我在每个阶段遇到的错误:
for i in chr1 chr2 chr3
mkfifo table1
-bash: syntax error near unexpected token `mkfifo'
mkfifo table2
grep -w $i table1.txt > table1 &
[5] 1969
grep -w $i table2.txt > table2 &
[6] 1970
cat table1 table2 > new_$i.txt
[5] Exit 1 grep -w $i table1.txt > table1
[6] Exit 1 grep -w $i table2.txt > table2
done
-bash: syntax error near unexpected token `done'
我无法弄清楚出了什么问题。for
如果我只是在没有循环和没有的情况下运行上述命令mkfifo
,并通过指定要匹配的模式(比如 chr1),它工作正常。知道如何进行这项工作吗?
顺便说一句,在我的实际代码中,我必须cat
在两个grep
ed 文件上运行另一个命令,而不是 。