我有兩個文件,table1.txt和table2.txt,第一列的字符爲chr1,chr2,chr3。我想迭代一個命令,使它從兩個表中只查詢包含chr1,chr2,chr3中的一個的行,並將表的子集(稱爲所有行與chr1)傳遞給另一個命令(比如說cat,它接受兩個表格作爲輸入)。輸出然後保存爲一個文件(比如new_chr1.txt用於chr1行上的操作)。使用for循環並將變量傳遞給命令
下面是這兩個表的虛擬表示:
table1.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
table2.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),它就可以正常工作。任何想法如何使這項工作?
順便說一下,在我的實際代碼中,我必須在兩個grep
ed文件上運行另一個命令,而不是cat
。
喜喬納森,THaks採摘這個錯誤在我的代碼。 – user1938965
嗨喬納森,你的意思是在grep命令之後加入等待嗎? – user1938965
感謝您的幫助。 – user1938965