Text-Processing

awk 只列印修改的行

  • May 28, 2022

我有這樣的文件

d1000 1000
d1001 100
d1002 10
d1003 1

我想修改長度不等於 4 的第二列。但我只想列印已修改的行,因此第 2 列中的原始文本保留在第 2 列中,並且更改列印在第 3 列中,並增加一個數字。

期望的輸出:

d1001 100 1101
d1002 10  1102
d1003 1  1103

我正在嘗試這些方面,但無法獲得語法或結果

awk -v n=1100 '((length($2)!=4 && length($2)>0) {new=($2=++n)}; {print $1, $2, new}' file

您可以像這樣將print現有行 ( $0) 和一個新欄位,,在參數之間使用輸出分隔符。

awk -v n=1100 'length($2)!=4 {print $0,++n}' file

輸出:

d1001 100 1101
d1002 10 1102
d1003 1 1103

如果您需要對輸出進行任何其他格式設置,可以使用printffunction. 這是對齊的範例:

$ awk -v n=1100 'length($2)!=4 {printf "%s %4s %s\n", $1, $2, ++n}' file
d1001  100 1101
d1002   10 1102
d1003    1 1103
$ awk -v n=1100 'length($2)!=4 {printf "%s %-4s %s\n", $1, $2, ++n}' file
d1001 100  1101
d1002 10   1102
d1003 1    1103

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