我的记录包含以下数据:
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~开头 每行都有各种字段,每个字段用~deelimeter分隔。大多数行在第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
答案 0 :(得分: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