我遇到sed问题,我需要用csv文件完成两件事
示例(没有UNES;)
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
示例(使用UNES;)
UNES;
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
到目前为止,我有这个:
sed -e 's/^\([^"UNES"]\)/BF2;\1/' | sed '/UNES/ a\UNH;'
这与UNES一样长;标签存在 - 我似乎无法弄清楚如何插入UNH;当UNES不在场时!
任何帮助非常感谢
示例输出:
UNES;
UNH;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
答案 0 :(得分:2)
以下是使用awk的方法:
awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file
在第一行,如果匹配/ ^ UNES; / print
,则设置标志f
。始终打印“UNH;”。如果已设置f
标志,请不要执行下一个操作,该操作适用于其余行。始终在第一行后将f
重置为0,以便所有其他行都具有“BF2;”添加到开始。
测试出来:
$ cat file
UNES;
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
$ awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file
UNES;
UNH;
BF2;50000024;IE15;041111;113901;verstuurd;Aangift;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
$ cat file2
50000024;IE15;041111;113901;verstuurd;Aangift;
50000024;IE15;041111;113901;verstuurd;Aangifte;
50000024;IE15;041111;113901;verstuurd;Aangifte;
$ awk 'NR==1 {if(f=/^UNES;/)print; print "UNH;"} !f{print "BF2;" $0} {f=0}' file2
UNH;
BF2;50000024;IE15;041111;113901;verstuurd;Aangift;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
BF2;50000024;IE15;041111;113901;verstuurd;Aangifte;
答案 1 :(得分:1)
您可以使用此sed命令:
sed '/^UNES;$/{i\
UNH;
n};s/^/BF2;/;' file.txt
细节:
/^UNES;$/i\
UNH;
在UNES时插入一个新行;是整条线。
n
用下一行替换模式空间
答案 2 :(得分:0)
试试这个,它适用于我
sed '/^UNES;$/{i\
UNH;
n};s/^[0-9]*/BF2;&/;'