Awk

對使用 find 找到的每個文件執行 awk,然後將結果重定向到新文件名

  • August 22, 2015

我試圖從 find 中獲取結果,然後執行 awk 以列印前兩列。然後我想將這些結果重定向到每個文件的新文件名,使用現有文件名並在名稱中添加一個附加後綴。目錄中的文件,原始源保留為 file.txt,新文件命名為 file-new.txt

例如:

find -type f -iname "*.txt" -exec awk '{print $1, $2}' {} \;

為了做到這一點,我需要添加什麼?使用 sed 會是更好的選擇嗎?

最簡單的方法是使用 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}
' {} +

引用自:https://unix.stackexchange.com/questions/224847