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  

1 行目を見てください。',' で区切られた複数のレコードがあります。',' で区切られたレコードを検索します。',' で区切られたレコードが 1 行目に見つかった場合は、それを次の行に配置し、追加する必要がある先頭の文字列に関係なく、'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

awk2つの区切り文字を使用して、を使用する1つの方法は次のとおりです。

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 に答える