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

このスクリプトは、;行末ごとに を に変更し、,次に残りのすべて;を に変換します,。これは、フィールドに値を割り当てることによって行われます。これにより、すべての入力フィールド区切り文字 (;で設定されたとおり-F';') が出力フィールド区切り文字 (デフォルトでは空白) に変更されます。次に、デフォルトのアクション ( ) を呼び出す true 条件 (1) を指定して、現在の行を印刷します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

関連情報