为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕慕森 2021-04-14 21:18:37
我有9列喜欢c1 c2 c3 c4 c5 c6 c7 c8 c9,我想关注的价值c1 c2 c3 c4 c5 and c9。列具有CSV格式的以下数据。如何通过CLI在Linux中执行此操作?请帮忙样本数据123,B006195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW12,C06195,T,O,INDIVIDUAL,25^5820200^,2018-04-25,13,NEW12345,B00619,T,O,IND,25^5820200^,2018-04-25,13,OLD我尝试使用 cat file.csv | awk '{print $1,$2,$3,$4,$5}' > newfile
查看完整描述

2 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

以下解决方案可能对您有所帮助,您需要在awknamed变量中提供字段编号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<=num;i++){

    printf("%s%s",$array[i],i==num?ORS:OFS)}}

' OFS=,   Input_file

上面的代码说明:


awk -F, -v fields="1,2,3,4,5,9" '              ##Setting field seprator as comma here with -F. Setting variable named fields with values of fields which we need.

BEGIN{                                         ##Starting BEGIN section here for awk which will be executed before reading the Input_file.

  num=split(fields, array,",")}                ##using split to split the variable fields into array named array and creating variable num which will have number of element of array.

{

  for(i=1;i<=num;i++){                         ##Starting a for loop here which starts from variable named i value from 1 to till value of variable num.

    printf("%s%s",$array[i],i==num?ORS:OFS)}}  ##Printing value of array[i] and then $array[i] will print the field value in current line too. Then checking condition variable i value equal to variable num then print new line else print space with OFS.

' OFS=,  Input_file                            ##Mentioning the Input_file name here.



查看完整回答
反对 回复 2021-04-16
  • 2 回答
  • 0 关注
  • 352 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信