如何使用linux cli忽略csv文件中的任何特定列数据?
我有9列,如如何使用linux cli忽略csv文件中的任何特定列数据?,linux,sorting,awk,grep,cat,Linux,Sorting,Awk,Grep,Cat,我有9列,如c1c2c3c4c5c6c7c8c9,我想对c1c2c3c4c5和c9的值进行分类 列具有以下CSV格式的数据。如何通过CLI在Linux中实现这一点?请帮忙 样本数据 123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW 12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW 12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,
c1c2c3c4c5c6c7c8c9
,我想对c1c2c3c4c5和c9
的值进行分类
列具有以下CSV格式的数据。如何通过CLI在Linux中实现这一点?请帮忙
样本数据
123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,OLD
我曾尝试使用
cat file.csv | awk'{print$1,$2,$3,$4,$5}>newfile
我不确定您所说的cat是什么意思,c1 c2 c3 c4 c5和c9
的值,但是如果您只想过滤这些列,那么您可以使用以下awk
命令:
awk 'BEGIN{OFS=FS=","}{print $1,$2,$3,$4,$5,$9}' sample.csv
输入:
more sample.csv
c1,c2,c3,c4,c5,c6,c7,c8,c9
123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,OLD
awk 'BEGIN{OFS=FS=","}{print $1,$2,$3,$4,$5,$9}' sample.csv
c1,c2,c3,c4,c5,c9
123,B006195,T,O,INDIVIDUAL,NEW
12,C06195,T,O,INDIVIDUAL,NEW
12345,B00619,T,O,IND,OLD
输出:
more sample.csv
c1,c2,c3,c4,c5,c6,c7,c8,c9
123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,OLD
awk 'BEGIN{OFS=FS=","}{print $1,$2,$3,$4,$5,$9}' sample.csv
c1,c2,c3,c4,c5,c9
123,B006195,T,O,INDIVIDUAL,NEW
12,C06195,T,O,INDIVIDUAL,NEW
12345,B00619,T,O,IND,OLD
解释:
more sample.csv
c1,c2,c3,c4,c5,c6,c7,c8,c9
123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW
12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,OLD
awk 'BEGIN{OFS=FS=","}{print $1,$2,$3,$4,$5,$9}' sample.csv
c1,c2,c3,c4,c5,c9
123,B006195,T,O,INDIVIDUAL,NEW
12,C06195,T,O,INDIVIDUAL,NEW
12345,B00619,T,O,IND,OLD
定义为字段分隔符(输入、输出)a,
(BEGIN{OFS=FS=“,”}
),然后在将输出重定向到新的csv文件后,只需为每行打印需要显示的列
如果您认为awk
对于这项任务来说是一种过度使用,那么您也可以使用cut
命令(-d',“
是定义一个,
作为分隔符,-f..。
是指定需要保留的字段):
下面的解决方案可能会对您有所帮助,您需要在
awk
变量中提供名为fields
的字段编号,并可以将其打印出来
awk -F, -v fields="1,2,3,4,5,9" 'BEGIN{num=split(fields, array,",")} {for(i=1;i<=num;i++){printf("%s%s",$array[i],i==num?ORS:OFS)}}' OFS=, Input_file
awk-F,-v fields=“1,2,3,4,5,9”'BEGIN{num=split(fields,array,“,”)}{for(i=1;i是否只保留c1 c2 c3 c4 c5和c9的值?并将其他列丢弃?对新来者的建议:如果答案解决了您的问题,请单击大复选标记接受它(✓) 在它旁边,也可以选择向上投票(向上投票要求至少15个信誉点)。如果您发现其他答案有帮助,请向上投票。接受和向上投票有助于未来的读者。请参阅[相关帮助中心文章][1][1]:可能与、、等重复。向下投票人,请提供对答案进行向下投票的原因。如果您发现其他答案有帮助,请向上投票。接受和向上投票有助于未来的读者。这是一个很好的原创解决方案+1!!;-)谢谢,艾伦。这很有效。我是指获得文件输出的cat文件名。