在修改awk
中的特定字段後,輸出字段分隔符上的信息是否丟失,是否總是這樣?如果有多個字段分隔符並且我希望它們被恢復,會發生什麼?awk中輸出字段分隔符在字段中替換
例如,假設我有一個簡單的文件example
包含:
a:e:i:o:u
如果我只是運行一個awk
腳本,它考慮了輸入分隔符,即打印每一行中我的文件,例如as running
awk -F: '{print $0}' example
我會看到原始的行。但是,如果我直接修改其中一個字段,例如與
awk -F: '{$2=$2"!"; print $0}' example
我不回去原線的改良版,而我看到的默認空白分離器分離的領域,即:
a e! i o u
我能找回的修改版本通過指定OFS原,例如:
awk -F: 'BEGIN {OFS=":"} {$2=$2"!"; print $0}' example
在這種情況下,然而,在存在多個潛在字段分隔符,但在多個分離的情況下是有簡單的方法恢復原始分隔符?
例如,如果example
有兩個:
和;
作爲分隔符,我可以用-F":|;"
處理文件,但會OFS沒有足以恢復原來的隔板在它們的相對位置。
更明確地說,如果我們切換到含有
a:e;i:o;u
我們可以使用
awk -F":|;" 'BEGIN {OFS=":"} {$2=$2"!"; print $0}' example2
(或-F"[:;]"
)example2
得到
a:e!:i:o:u
,但我們已經失去了區別之間 ;這將一直保持下去,如果我們能恢復
a:e!;i:o;u
問題是這裏罕見的好問題之一。爲什麼不簡單地使用'-F'[:;]''來添加一個非工作示例。這會使問題變得完美 - imo – hek2mgl
明確添加的示例 – borrible
RT的字段分隔符相當於GNU擴展。我想知道他們爲什麼沒有它。 –