![CSVファイルからn列を削除する[閉じる]](https://linux33.com/image/139649/CSV%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8B%E3%82%89n%E5%88%97%E3%82%92%E5%89%8A%E9%99%A4%E3%81%99%E3%82%8B%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
次のデータを含むcsvファイルがあります。
12,1234,28-07-2018 05:28:12.21,ABC60,3456,28-07-2018 05:28:12.21,AB60,7580,28-07-2018 06:28:12.21,PQ
Unixでは、ファイルからすべての日付列を削除する必要があります。
答え1
カンマで区切られたフィールドにカンマが含まれていないため、列3、6、9を削除したいとします。
$ cut -d, -f1,2,4,5,7,8,10 <file
12,1234,ABC60,3456,AB60,7580,PQ
このcut
コマンドは、ファイルから指定された列を抽出します。デフォルトでは、タブ文字は列区切り文字として使用されますが、-d,
区切り文字をコンマに設定しました。この-f
オプションは、抽出する列番号(または列番号の範囲)を使用します。
csvcut
以下で使用CSVキット真のCSVパーサーである組み込みコンマを含むフィールドも処理できます。
$ csvcut -c 1,2,4,5,7,8,10 file
12,1234,ABC60,3456,AB60,7580,PQ
このツールは柱の切断も処理できます。名前ファイルの各列にヘッダーがある場合。
答え2
使用awk
:
echo "12,1234,28-07-2018 05:28:12.21,ABC60,3456,28-07-2018 05:28:12.21,AB60,7580,28-07-2018 06:28:12.21,PQ" | awk -F ',' '{for (i=1;i<=NF;i++) if($i !~ "-") printf "%s,",$i}'
12,1234,ABC60,3456,AB60,7580,PQ,
- 欠けている熱印刷
-
答え3
そうではありませんがawk
...
tr ',' '\n' < csv | grep -E -v '^[0-9]{2}-[0-9]{2}-[0-9]{4}' | tr '\n' ','
12,1234,ABC60,3456,AB60,7580,PQ,