2015-10-12 43 views
-1

我希望對目錄中的多個文件執行管道命令。在多個文件上運行命令並改變輸入文件的輸出文件名稱

grep -r Chr18 C* | awk '$2>=1600000&&$2<=1700000' > nameDependentOnInputFile.txt 

我希望運行命令的每個文件都以C開頭,所以我應該能夠使用*在所有這些文件上運行命令。如何根據輸入文件更改輸出文件名?我也看到,我可以覆蓋最初的文件,但這是不可取的。

+0

是在同一個目錄下的文件?他們都是文本文件(C.txt),你是否想在160000-170000之間得到'$ 2'#? – Chris

+0

是的,所有的文件都在同一個目錄下,它們都是cov_af文件...但輸出應該是.txt –

回答

2

所以,如果你想在一個目錄下$2是16萬和17萬之間只打印這些文件,然後像下面應該工作:

for f in /path/to/files/*.cov_af ; do 
bname=`basename $f` 
pref=${bname%%.txt} 
awk '$2 >= 160000 && $2 <= 170000' $f > /path/to/store/output/${pref}_new.txt 
done 
+1

如果你打算使用'basename',你可以去'pref = $(basename「$ f「.txt)'並保存一行。 'basename'可以自行剝離後綴。否則,我會建議'bname = $ {f ## * /}; PREF = $ {BNAME%的.txt}'。不要忘記引用你的變量。 –

+0

解決方案效果很好!我確實使用了上述意見建議 –

+0

感謝您的反饋,我很高興它工作:)。 – Chris

相關問題