![删除不同长度的数组列](https://linux22.com/image/97142/%E5%88%A0%E9%99%A4%E4%B8%8D%E5%90%8C%E9%95%BF%E5%BA%A6%E7%9A%84%E6%95%B0%E7%BB%84%E5%88%97.png)
我想删除一个没有固定大小的数组。例如
file.csv
001,"Geography",TRUE,"{1,0,1,1}",1,"CHARLIE"
002,"History",FALSE,"{0,0,1,1}",0,"DAVID"
003,"Mathematics",TRUE,"{1,1,1,1}",1,"SAM"
以下数组应转换为以下格式
file_edited.csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
如何在命令行中执行此操作。
答案1
我确信有很多不同的方法可以实现这一点,我更喜欢sed
:
sed 's/"{.*}",//'
在GNU/Linux(GNU sed
),使用:
sed 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
操作系统(BSD sed
,注意-E
标志):
sed -E 's/"{.*}",//' csv
001,"Geography",TRUE,1,"CHARLIE"
002,"History",FALSE,0,"DAVID"
003,"Mathematics",TRUE,1,"SAM"
答案2
使用 Python 及其 CSV 模块,例如以下单个命令:
python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
del row[3]
w.writerow(row)' < file.csv > file_edited.csv
神奇的事情发生在命令的倒数第二行。在Python中,数组从索引0开始,row[3]
第四列也是如此;因此,这只是删除每条记录的第四列。
或者,您可以简单地打印第 0、1、2、4 和 5 列,使用
python -c 'import sys,csv
w = csv.writer(sys.stdout, quoting=csv.QUOTE_NONNUMERIC)
for row in csv.reader(sys.stdin):
w.writerow([row[0], row[1], row[2], row[4], row[5]])' < file.csv > file_edited.csv