CSVファイルからn列を削除する[閉じる]

CSVファイルからn列を削除する[閉じる]

次のデータを含む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,

関連情報