将特定列添加到CSV文件的末尾

Adr*_*ian 1 linux bash

可以使用bash进行以下过程吗?

"Id";"Vzor";"Name";"Number";"Number2";"Ship"
"00041534";"MGKHTYE";"2014 TREK TYAX EXPERT, GREY/YELLOW";"100";"100,30";"A"
"00041535";"MGKHTYE";"2014 TREK TYAX EXPERT 29 , BLACK/RED";"100";"453,30";"A"
"00041531";"MGKHTYSP";"2014 OPS TYAX SPORT, WHITE/GREY";"100,90";"306,60";"A"
"00046024";"MGKFAR";"2015 OPS ARGUS, DARK TEAL";"899,90";"100,90";"A"
"00046088";"MGKHFB";"2015 TREK FIREBALL 24  , BLACK";"100,90";"239,90";"A"
"00046026";"MGKHFB";"2015 OPS FIREBALL 26 , BLUE";"100,90";"359,90";"A"
Run Code Online (Sandbox Code Playgroud)

将列添加到名为"Category"的第一行和(我不能做的)各个行,从第3列添加该列的前两个单词(这将是类别名称):

"Id";"Vzor";"Name";"Number";"Number2";"Ship";"Category"
"00041534";"MGKHTYE";"2014 TREK TYAX EXPERT, GREY/YELLOW";"100";"100,30";"A";"2014 TREK"
"00041535";"MGKHTYE";"2014 TREK TYAX EXPERT 29 , BLACK/RED";"100";"453,30";"A";"2014 TREK"
"00041531";"MGKHTYSP";"2014 OPS TYAX SPORT, WHITE/GREY";"100,90";"306,60";"A";"2014 OPS"
"00046024";"MGKFAR";"2015 OPS ARGUS, DARK TEAL";"899,90";"100,90";"A";"2015 OPS"
"00046088";"MGKHFB";"2015 TREK FIREBALL 24  , BLACK";"100,90";"239,90";"A";"2015 TREK"
"00046026";"MGKHFB";"2015 OPS FIREBALL 26 , BLUE";"100,90";"359,90";"A";"2015 OPS"
Run Code Online (Sandbox Code Playgroud)

猛击力量!

anu*_*ava 5

你可以使用这个awk命令:

awk 'BEGIN{FS=OFS=";"}
   NR==1{print $0,"\"Category\"";next} {
   split($3, a, " ");
   printf "%s%s%s %s\"\n", $0, OFS, a[1], a[2]
}' file

"Id";"Vzor";"Name";"Number";"Number2";"Ship";"Category"
"00041534";"MGKHTYE";2014 TREK TYAX EXPERT, GREY/YELLOW;"100";"100,30";"A";"2014 TREK"
"00041535";"MGKHTYE";2014 TREK TYAX EXPERT 29 , BLACK/RED;"100";"453,30";"A";"2014 TREK"
"00041531";"MGKHTYSP";2014 OPS TYAX SPORT, WHITE/GREY;"100,90";"306,60";"A";"2014 OPS"
"00046024";"MGKFAR";2015 OPS ARGUS, DARK TEAL;"899,90";"100,90";"A";"2015 OPS"
"00046088";"MGKHFB";2015 TREK FIREBALL 24  , BLACK;"100,90";"239,90";"A";"2015 TREK"
"00046026";"MGKHFB";2015 OPS FIREBALL 26 , BLUE;"100,90";"359,90";"A";"2015 OPS"
Run Code Online (Sandbox Code Playgroud)

说明:

  • BEGIN{FS=OFS=";"} 将输入和输出字段分隔符设置为 ;
  • NR==1 仅对记录#1执行此块
  • {print $0,"\"Category\"";next} 打印记录和文字文本 "Category"
  • split($3, a, " ")用空格分割字段#3并a用单个字填充数组
  • printf 通过从数组中取2个第一个单词来打印格式化输出 a

  • 伙计们,谢谢你,行结束是问题所在.Dos2Unix解决了这个问题.祝你新年快乐!:) (3认同)