对通过 find 找到的每个文件执行 awk,然后将结果重定向到新文件名

Zed*_*dus 8 find io-redirection awk

我试图从 find 中获取结果,然后执行 awk 来打印前两列。然后我想将这些结果重定向到每个文件的新文件名,使用现有文件名并在名称中添加附加后缀。原始源目录中的文件保留为 file.txt,新文件命名为 file-new.txt

例如:

find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;
Run Code Online (Sandbox Code Playgroud)

为了做到这一点,我需要添加什么?使用 sed 会是更好的选择吗?

Gil*_*il' 10

最简单的方法是使用awk的输出重定向。awk 输出重定向在简单情况下非常容易使用:第一次使用重定向时打开文件,随后重定向到相同文件名的使用现有文件描述符。

如果您想为文件名添加后缀,就像这样简单

find -type f -iname "*.txt" -exec awk '{print $1, $2 >(FILENAME "-new")}' {} +
Run Code Online (Sandbox Code Playgroud)

但是你可以对文件名进行更复杂的转换(这里只在每个输入文件的第一行重新计算):

find -type f -iname "*.txt" -exec awk '
    FNR==1 {out=FILENAME; sub(/\.[^.]*$/, "-new&", out) || out = out "-new"}
    {print $1, $2 >out}
' {} +
Run Code Online (Sandbox Code Playgroud)