我有以下结构:
column1,column2
value1,string1;string2;string3;string4
value2,string11;string22
我想修改该结构并使用以下格式创建一个新文件:
column1,column2
value1,string1
value1,string2
value1,string3
value1,string4
value2,string11
value2,string22
答案 0 :(得分:1)
awk -F"[;,]" 'NR==1{print;next}{for(i=2;i<=NF;i++)print $1","$i}' file
答案 1 :(得分:0)
这是一个sed解决方案,如果只是为了显示它在awk中的容易程度(并且因为编写sed命令很有趣):
$ sed '1b;:a;s/^\([^,]*\),\([^;]*\);/\1,\2\n\1,/;ta' infile
column1,column2
value1,string1
value1,string2
value1,string3
value1,string4
value2,string11
value2,string22
这是基于观察到每行(在第一行之后),;
必须由换行符,第一个单词和逗号替换。
可阅读评论:
1b # On first line: jump to end and print
:loop # Label to jump to
s/^\([^,]*\),\([^;]*\);/\1,\2\n\1,/ # Substitute one ";" as described above
t loop # If the pattern was modified, jump to "loop"
替换命令中的捕获组是&#34;从行开头的,
以外的字符&#34; (第一组)和&#34; ;
之间的字符,
与第一个;
&#34;之间的字符,因此在循环第一行以进行更改时,第一次捕获小组始终为value1
,第二个小组在每次迭代中为string1
,string2
,依此类推。
sed -e '1b;:a' -e's/^\([^,]*\),\([^;]*\);/\1,\2\n\1,/;ta' infile