Text-Processing
使用正則表達式作為分隔符時如何列印正確的分隔符?
我有看起來像這樣的線條
123-456-789 12.34.56 example
我想選擇 12,添加 2,然後按原樣列印整行。所以結果應該是:
123-456-789 14.34.56 example
我有這個 awk 表達式:
awk 'BEGIN {FS="[ .]"}{$2=$2+2}{print}'
但它給了我
123-456-789 14 34 56 example
點消失了,取而代之的是空格。
嘗試“恢復”複雜/複合欄位分隔符可能會破壞某些值和整個記錄的一致性。
相反,請使用以下方法:awk '{ n = substr($2, 1, index($2, ".")); sub(/[^.]+\./, n + 2 ".", $2) }1' file
輸出:
123-456-789 14.34.56 example
上述命令將使用空格作為預設欄位分隔符,並
$2
僅對第二個欄位執行所有需要的處理。
awk '{ split($2,a,"\."); a[1]+=2; $2=sprintf("%d.%d.%d", a[1],a[2],a[3]) } 1' file
或者,
awk '{ split($2,a,"\."); $2=sprintf("%d.%d.%d", a[1] + 2,a[2],a[3]) } 1' file
這會將行讀取為一組空格分隔的欄位。它將第二個欄位拆分為點,並將結果的第一部分加 2。然後,它在列印結果記錄之前將第二個欄位重新形成為三個點分隔的整數(列印由
1
結尾完成,這是一種快捷方式{ print }
)。這假設我們知道第二條記錄確實是三個點分隔的整數。
我會這樣做,因為它在發生的事情上非常明確,因此易於理解和維護。