Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用linux cli忽略csv文件中的任何特定列数据?_Linux_Sorting_Awk_Grep_Cat - Fatal编程技术网

如何使用linux cli忽略csv文件中的任何特定列数据?

如何使用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,

我有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,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文件名。