我希望对目录中的多个文件执行管道命令。在多个文件上运行命令并改变输入文件的输出文件名称
grep -r Chr18 C* | awk '$2>=1600000&&$2<=1700000' > nameDependentOnInputFile.txt
我希望运行命令的每个文件都以C开头,所以我应该能够使用*在所有这些文件上运行命令。如何根据输入文件更改输出文件名?我也看到,我可以覆盖最初的文件,但这是不可取的。
我希望对目录中的多个文件执行管道命令。在多个文件上运行命令并改变输入文件的输出文件名称
grep -r Chr18 C* | awk '$2>=1600000&&$2<=1700000' > nameDependentOnInputFile.txt
我希望运行命令的每个文件都以C开头,所以我应该能够使用*在所有这些文件上运行命令。如何根据输入文件更改输出文件名?我也看到,我可以覆盖最初的文件,但这是不可取的。
所以,如果你想在一个目录下$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
如果你打算使用'basename',你可以去'pref = $(basename“$ f“.txt)'并保存一行。 'basename'可以自行剥离后缀。否则,我会建议'bname = $ {f ## * /}; PREF = $ {BNAME%的.txt}'。不要忘记引用你的变量。 –
解决方案效果很好!我确实使用了上述意见建议 –
感谢您的反馈,我很高兴它工作:)。 – Chris
是在同一个目录下的文件?他们都是文本文件(C.txt),你是否想在160000-170000之间得到'$ 2'#? – Chris
是的,所有的文件都在同一个目录下,它们都是cov_af文件...但输出应该是.txt –