awk 和 sed 在每個相關行的行尾追加

awk 和 sed 在每個相關行的行尾追加

我想做一些行操作,但陷入了逐行處理。我的文件如下所示:

10.10.10.10 ABtest
10.10.10.11 ABprod

我想根據行尾的字串在每一行附加一個字串。

我的方法是使用 awk 測試ABtest行尾的字串,然後使用 sed 進行ABtest轉換test。之後,我想將輸出附加到每個相關行。

我想輸出如下:

10.10.10.10 ABtest test
10.10.10.11 ABprod prod

答案1

不需要兩者都使用,sed而且awk,您可以使用一種工具。實現您目標的程式碼awk可能是

awk ' 
/AB/ { 
        printf $0
        gsub("^AB", "", $2)
        printf " %s\n", $2
     }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
EOT

/<expression>/搜尋正規表示式,該{<code>}部分告訴 awk 如何處理該記錄。在這種特殊情況下,函數gsub會取代第二列中“AB”的所有外觀 - 如果您只想替換第一個外觀,請使用sub()但關於正則表達式,我想您可以在此處使用一個或另一個具有相同的結果- 以及結果隨後打印。

您的問題尚不清楚要編輯的行之間是否有任何行要不加更改地列印。如果是這種情況,您需要在配對和編輯後跳到下一筆記錄,如下所示:

awk '
/AB/ { printf $0; gsub("^AB", "", $2); printf " $2\n"; next; }
{ print $0 }
' <<EOT
10.10.10.10 ABtest
10.10.10.11 ABprod
testtesttets
EOT

也許您應該使用創建一個更具體的測試if。我強烈建議您查看一些 awk 資源(這裡或者這裡例如)

相關內容