我有一个 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,