-1

我有如下数据的记录:

0IAB20130926

1~CVBB2WD~ED000~1152~1~1273~mc0332~abc@mail.com~29~0~101~ 1~CVBB2WD~ED000~1059~1~1274~mc0332~abc@mail.com~ 29~0~102~ 1~CVBB2WF~ED000~~~~~~~~21~0~1~"val1,val2,val3,val4,val5,val6,val7" 1~CVBB2WD~ED000~~~~~ ~~~21~0~1~"val1,val2,val3,val4,val5,val6,val7"

9000027681

第一行和最后一行是页眉和页脚(分别以 0 和 9 开头)。数据以 1 开头~ 每行有不同的字段,每个字段用 ~ 分隔符分隔。大多数行在第 14 个字段(如第一两行)中没有任何值,除了少数记录的值如“val1,val2,val3..”(如最后两行)我需要使用位置(第 14 位),需要替换为第 4、5、6、7、8 位的空字段。所以我的输出应该是这样的:

0IAB20130926

1~CVBB2WD~ED000~1152~1~1273~mc0332~abc@mail.com~29~0~101~ 1~CVBB2WD~ED000~1059~1~1274~mc0332~abc@mail.com~ 29~0~102~1~CVBB2WF~ED000~val1~val2~val3~val4~val5~val6~val7~21~0~1 1~CVBB2WD~ED000~val1~val2~val3~val4~val5~val6~val7 ~21~0~1

9000027681

4

1 回答 1

0

这个 awk 应该可以工作:

awk -F'~' '/^1/ && $14!=""{gsub(/,/, "~", $14); $14=substr($14, 2, length($14)-2); 
           $0=$1 OFS $2 OFS $3 OFS $14 OFS $11 OFS $12 OFS $13}1' OFS='~' file

0IAB20130926

1~CVBB2WD~ED000~~~1152~1~1273~mc0332~abc@mail.com~29~0~101~
1~CVBB2WD~ED000~~~1059~1~1274~mc0332~abc@mail.com~29~0~102~
1~CVBB2WF~ED000~val1~val2~val3~val4~val5~val6~val7~21~0~1
1~CVBB2WD~ED000~val1~val2~val3~val4~val5~val6~val7~21~0~1

9000027681
于 2013-10-04T06:42:53.710 回答