Awk
在特定列上查找和替換
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"