
次のような 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