使用基本名称时无法让“awk for循环”工作

使用基本名称时无法让“awk for循环”工作

我有很多 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

相关内容