从 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,

相关内容