我有很多 xyz 文件想要通过 awk 运行。我只想为每个文件创建一个附加“_s”的新文件。使基本名称语法正确时遇到一些问题。这是我所拥有的。
for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' > $(basename $i)_s.xyz ; done
答案1
将已处理文件的输出写入新文件并_s
在扩展名之前添加到文件名部分的正确语法是:
for i in *.xyz; do awk -F" " '{printf $1 $2 $3}' $i > ${i%\.*}_s.xyz ; done
该${i%\.*}
部分会修剪$i
从最后一次出现到.
末尾的字符串,有效地删除扩展。
在您的示例中,您可以使用${i%\.xyz}
,但这不太通用。
答案2
您需要将文件名传递为“ls *.xyz”,然后重命名 $i。
for i in `ls *.xyz`; do
mv $i $i_s
done