CSV - 如何根据现有列添加列?

时间:2017-02-23 14:09:39

标签: bash awk sed

这样做的最佳方式是什么?如何?

我会收集名为sedAWKbash的内容。 我曾经使用AWK一次用于一个命令,其他命令从不。 我搜索过,其他明显相似的问题没有我需要的答案。

我在CSV文件中有一个名为fields的列:

_________________________
field1 | field2 | field3|
-------------------------
1990AB | 123456 | 123456|
-------------------------

我想根据这三个原始fields添加fields,如下所示:

_______________________________________________________
field1 | field2 | field3 | field1a | field2a | field3a |
-------------------------------------------------------
1990AB | 123456 | 123456|  1990   |  12345  |  12345  |
-------------------------------------------------------

其中:

  • field1a 1990第1列前4位总是数字,然后是alpha
  • field2a 12345第2列始终为6位
  • field3a 12345第3列始终为6位

这些是在数据库导入之前的一次性文件操作。

macosx有大约600万条记录。第二次尝试这个问题,因为我的第一次尝试显然不太好。在这方面,我是100%的新手。

1 个答案:

答案 0 :(得分:1)

awk救援!

即使您之前没有使用awk

的经验,也应该很容易阅读
$ awk -F, -v OFS=, 'NR==1 {for(i=1;i<=3;i++) $(++NF)=$i"a"}    
                    NR>1  {$(++NF)=substr($1,1,4); 
                           $(++NF)=substr($2,1,5);
                           $(++NF)=substr($3,1,5)}1' file    

NR是行号,标题的特殊处理,NF是字段数,此处每增加一列递增,$i是位置i的字段值。最后一个1是打印行的简写。初始选项用于将输入字段分隔符(F)和输出字段分隔符(OFS)设置为逗号。