Supondo que os itens não contenham “|” e as tags não contenham “,”:
awk -F '[,|]' '{for(i=1;i<NF;i++)print$i$NF}' input.txt
As características dos dados de entrada:
Entrada
100,210,354,462|acct
331,746,50|mis
90,263,47,14|sales
Saída
100acct
210acct
354acct
462acct
331mis
746mis
50mis
90sales
263sales
47sales
14sales
Supondo que os itens não contenham “|” e as tags não contenham “,”:
awk -F '[,|]' '{for(i=1;i<NF;i++)print$i$NF}' input.txt
PERL fará?
$ perl -ne 'chomp; @a=split(/\|/); @b=split(/,/,$a[0]); map{print "$_$a[1]\n"}@b' input.txt
Solução sed pura:
sed ':a;s/\(.*\),\([^,]*\)|\(.*\)/\n|/;ta;s/|//' input.file
E agora, no bash e no sed:
cat test.txt| while IFS="|" read i t ; do echo $i | sed "s/\([0-9]\+\)/$t/g;s/,/\n/g" ; done
E apenas no bash (cortesia de Nahuel Fouilleul):
while IFS="|" read i t;do while read -d, j;do echo "$j$t";done <<<"$i,";done <test.txt
Sed ...
sed -e 's/^\([0-9][0-9]*\),.*|\(.*\)//'
se o primeiro campo não for numérico, ele poderá ser alterado para algo como
sed -e 's/^\([^,][^,]*\),.*|\(.*\)//'