Text-Processing
awk 腳本用 if 將值替換為增量
我有一個管道分隔文件
d1000|1000 d1001|100 d1002|10 d1003|1 d1004| d1005|
如果長度小於 4 位,我想修改 $2,並且保留空格
所以試圖通過 awk 腳本來做
BEGIN { FS="|"; OFS="\t" } { n=1100 { if (length($2)!=4 && length($2)>0) {$2=++n}}; print $1, $2 }
但它一遍又一遍地列印相同的數字
d1000 1000 d1001 1101 d1002 1101 d1003 1101 d1004 d1005
而想要的輸出
d1000 1000 d1001 1101 d1002 1102 d1003 1103 d1004 d1005
編輯:這是上面的程式碼,格式為
gawk -o-
:BEGIN { FS = "|" OFS = "\t" } { n = 1100 if (length($2) != 4 && length($2) > 0) { $2 = ++n } print $1, $2 }
如果縮進更一致,錯誤可能很明顯:
BEGIN { FS="|"; OFS="\t" } { n=1100 { if (length($2)!=4 && length($2)>0) { $2=++n } }; print $1, $2 }
對於每條記錄,外大括號內的所有內容都會無條件地執行 - 因此
n
每行都會重置 的值。您應該將初始化移動
n
到BEGIN
塊:BEGIN { FS="|"; OFS="\t"; n=1100 } { { if (length($2)!=4 && length($2)>0) { $2=++n } }; print $1, $2 }
或(更慣用的)
BEGIN { FS="|"; OFS="\t"; n=1100 } (length($2)!=4 && length($2)>0) { $2=++n } { print $1, $2 }