Text-Processing

使用正則表達式作為分隔符時如何列印正確的分隔符?

  • May 24, 2018

我有看起來像這樣的線條

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 })。

這假設我們知道第二條記錄確實是三個點分隔的整數。

我會這樣做,因為它在發生的事情上非常明確,因此易於理解和維護。

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