如何使用 awk 從列中刪除和替換欄位分隔符號?

如何使用 awk 從列中刪除和替換欄位分隔符號?

我有這樣的 CSV 檔案:

name_var;type_var;
id;string;
dt_depot;string;
num_artc;string

我想刪除第一個;並替換最後一個,, 以便輸出如下所示:

name_var type_var,
id string,
dt_depot string,
num_artc string

答案1

簡單地用sed替換:

$ sed 's/;$/,/; s/;/ /g' file
name_var type_var,
id string,
dt_depot string,
num_artc string

至於awk解決方案,如果輸入檔案應該只包含 2 個填充列 - 您可以使用以下awk表達式:

$ awk -F";" '{ if (NF==3) $2=$2","; print $1,$2 }' file
name_var type_var,
id string,
dt_depot string,
num_artc string

答案2

$ awk -F';' '{sub(/;$/,","); $1=$1} 1' file
name_var type_var,
id string,
dt_depot string,
num_artc string

該腳本更改;行末尾的每個字符,然後透過向字段分配值來,將剩餘的每個字符轉換為,這會導致所有輸入字段分隔符(由 設定)更改為輸出字段分隔符(預設為空白)。然後,它透過指定呼叫預設操作 ( ) 的真條件 (1) 來列印目前行。;,;-F';'print $0

答案3

awk類似的東西可以完成這項工作:

awk -F\; '{print $1" "$2","}'

如果您不喜歡最後一個逗號,可以這樣重寫:

 awk -F\; '{ if (NF != 2) print $1" "$2","; else  print $1" "$2;}'

答案4

使用此命令:

awk '{sub(/;$/,",")sub(/;/," ")}1' file

你得到這個輸出:

name_var type_var,
id string,
dt_depot string,
num_artc string

相關內容