複数の.csvファイルの連続した数値列を単一の.csvファイルにマージする

複数の.csvファイルの連続した数値列を単一の.csvファイルにマージする

私はLinux/Centos7を使用しています。マージするCSVファイルが複数あり、このコマンドを使用してマージしています。

cat *csv > all.csv

ただし、最初の列には連続した数字が含まれているため、マージして順番に番号を付け直す必要があります。

==> 1.csv <==
1,bob,date,body
2,joe,date,body
3,ann,date,body

==> 2.csv <==
1,lisa,date,body
2,paul,date,body
3,mike,date,body

結果では、最初の列の番号を再編成したいと思います。

==> output.csv <==
1,bob,date,body
2,joe,date,body
3,ann,date,body
4,lisa,date,body
5,paul,date,body
6,mike,date,body

定期的なマージを実行するときにこれがあり、このマージされたファイルの番号を再度付けることができる場合に機能します。

1,bob,date,body
2,joe,date,body
3,ann,date,body
1,lisa,date,body
2,paul,date,body
3,mike,date,body

答え1

このコマンドはあなたが望むことをします

cat *.csv | cut  --complement -d',' -f1 |sed -e 's/^/,/' |nl |sed -e "s/ //g"|sed -e "s/\\t//g" >all.csv

cut --complement -d',' -f1最初の列を切り取ると取得できます。

bob,date,body
joe,date,body
ann,date,body
lisa,date,body
paul,date,body
mike,date,body

sed -e 's/^/,/'各行の先頭に 、 を追加します。

,bob,date,body
,joe,date,body

nl は各行の先頭に数字を追加します。

 1  ,bob,date,body
 2  ,joe,date,body
 3  ,ann,date,body
 4  ,lisa,date,body

sed -e "s/ //g"|sed -e "s/\\t//g"数字とカンマ(、)の間のスペースを削除します。

関連情報