Awk

在特定列上查找和替換

  • August 8, 2019

sed我喜歡awk gsub()使用sed.

樣本數據:

122|abc|ds,we||wrqg
145|dw|ett,335||nxd
166|rotl|qqqp,eoepepe||ge
776|gge|022||pp
039|pot|011a||lot

在第 3 列,我想,在 pipe( ) 中替換逗號( |)

當我嘗試使用gsub()時,出現錯誤:

awk '{gsub(",","|",$3)}1' in.file > out.file

awk: syntax error near line 1
awk: illegal statement near line 1
awk: syntax error near line 1
awk: bailing out near line 1

另一個,我將把它導入我的數據庫(Oracle)。如果將數據,替換為|,則更改的數據記錄將不在同一欄位上。如何做呢?

輸出應該是這樣的。

122|abc|ds|we|wrqg
145|dw|ett|335|nxd
166|rotl|qqqp|eoepepe|ge
776|gge|022||pp
039|pot|011a||lot

任何人,我真的需要這個。

Solaris上/usr/bin/awk對各種功能的支持受到嚴重限制。特別是,該gsub()功能沒有實現。這在 Solaris 上的手冊中awk有說明。

為此,您應該使用/usr/xpg4/bin/awk(或nawk“新awk”)。

您的程式碼也沒有為 指定欄位分隔符awk,因此$3永遠不會包含任何內容,除非您的數據中碰巧有足夠的空格來意外創建第三個空格分隔的欄位。同樣,您不指定輸出欄位分隔符,因此任何修改的行都將其欄位由空格分隔。

反而:

/usr/xpg4/bin/awk -F '|' 'BEGIN { OFS=FS } { gsub(",", "|", $3); print }' file

要在 Solaris 上始終/usr/xpg4/bin/awk作為預設設置,請在 shell 的啟動文件中使用。awk``PATH="$(/usr/xpg4/bin/getconf PATH):$PATH"

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