我试图从 find 中获取结果,然后执行 awk 来打印前两列。然后我想将这些结果重定向到每个文件的新文件名,使用现有文件名并在名称中添加附加后缀。目录中的文件,原始源保留为 file.txt,新文件命名为 file-new.txt
例如:
find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;
为了做到这一点,我需要添加什么?使用 sed 会是更好的选择吗?
答案1
最简单的方法是使用 awk 的输出重定向。 awk 输出重定向在简单情况下非常容易使用:第一次使用重定向时打开文件,随后重定向到同一文件名使用现有的文件描述符。
如果你想在文件名中添加后缀,那就很简单
find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} +
但是您可以对文件名进行更复杂的转换(这里仅在每个输入文件的第一行重新计算):
find -type f -iname "*.txt" -exec awk '
FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"}
{print $1, $2 >out}
' {} +