这个问题已经有答案了:
unix for loop modify the output filename(1个答案)
上个月关门了。
我有一个for循环,它接受具有一种扩展名的文件,但管道中的最后一个命令要求STDIN文件具有另一种扩展名。在我的管道中,我使用awk
来更改文件类型,以便为最终命令正确格式化,但扩展名仍然链接到初始输入文件。
举例来说:
for file in *.AAA
do
commandA $file | awk ' { print } ' | commandB
commandB的典型用法:
commandB -i myfile.BBB
有没有一种方法可以在for循环和管道的中间更改文件的扩展名?
1条答案
按热度按时间gorkyyrv1#
我认为你可以在for循环和管道的中间改变文件的扩展名,正如你所看到的,
${file%.*}
是一个很酷的技巧,基本上删除了文件扩展名(*.AAA
),然后,我添加.BBB
扩展名来创建新的文件名,我称之为new_file
,最重要的是,我通过-i
选项将这个修改后的文件传递给commandB
!或者你可以使用进程替换,所以我使用
sed
将文件名中的文件扩展名从.AAA
更改为.BBB
,然后,我使用称为进程替换的东西将这个花哨的修改后的文件名传递给commandB
,它将命令的输出视为临时文件: