4

输入文件:

DAN|a@gmail.com,c@yahoo.co.in,abc@gmail.com  
NAB|a@gmail.com  
PAT|a@gmail.com  
DAN|y@gmail.com  
NAB|y@yahoo.in  
PAT|z@redhat.com,abc@gmail.com  
DAN|y@gmail.com,abc@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in  
DAN|y@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in  

考虑第一行,有多个记录是“,”分隔的。查找 ',' 分隔的记录。如果在第一行找到','分隔记录,则将其放入下一行并附加'DAN |',无论开头的字符串是什么,都应该附加。所以输出应该是:

DAN|a@gmail.com  
DAN|c@yahoo.co.in     
DAN|abc@gmail.com  
NAB|a@gmail.com  
PAT|a@gmail.com  
DAN|y@gmail.com  
NAB|y@yahoo.in  
PAT|z@redhat.com  
PAT|abc@gmail.com  
DAN|y@gmail.com  
DAN|abc@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in  
DAN|y@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in 
4

2 回答 2

2

这是使用 的一种方式awk,使用两个分隔符:

awk -F "[|,]" '{ for (i=2;i<=NF;i++) print $1 "|" $i }' file

这是使用单个分隔符的另一种方式:

awk -F, '{ for (i=1;i<=NF;i++) print (i>1 ? substr($0,0,4) : "") $i }' file

结果:

DAN|a@gmail.com
DAN|c@yahoo.co.in
DAN|abc@gmail.com  
NAB|a@gmail.com  
PAT|a@gmail.com  
DAN|y@gmail.com  
NAB|y@yahoo.in  
PAT|z@redhat.com
PAT|abc@gmail.com  
DAN|y@gmail.com
DAN|abc@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in  
DAN|y@gmail.com  
NAB|b@yahoo.co.in  
PAT|c@uix.xo.in  
于 2013-02-21T11:12:04.657 回答
0

另一个:

awk -F'[|,]' '{gsub(/,/,RS $1 "|")}1' file
于 2013-02-21T13:26:02.130 回答