2015-10-12 41 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

相关问题