awk output

hello all

input file

AAA:  XXX1
CCC: DD SS
SSS: SSS1
BBBB:  ASAS
ZZZ:  ZZZZZ1
XXX:  XXXXXXXXXXXXXXX1
PPPP:  PPPPPP1
RRRR:  111111111
ZZZ:  ZZZZZ2
XXX:  XXXXXXXXXXXXXXX2
PPPP:  PPPPPP2
RRRR:  222222222
ZZZ:  ZZZZZ3
XXX:  XXXXXXXXXXXXXXX3
PPPP:  PPPPPP3
RRRR:  33:33:33:33:33

AAA:  XXX2
CCC: DD WW
SSS: SSS2
BBBB:  ASASQ
ZZZ:  ZZZZZ11
XXX:  XXXXXXXXXXXXXXX11
PPPP:  PPPPPP11
RRRR:  1111111112
ZZZ:  ZZZZZ22
XXX:  XXXXXXXXXXXXXXX22
PPPP:  PPPPPP22
RRRR:  2222222223
ZZZ:  ZZZZZ33
XXX:  XXXXXXXXXXXXXXX33
PPPP:  PPPPPP33
RRRR:  33:33:33:33:33:44

Expected result

XXX1|SSS1|ZZZZZ1|PPPPPP1|111111111|
XXX1|SSS1|ZZZZZ2|PPPPPP2|222222222|
XXX1|SSS1|ZZZZZ3|PPPPPP3|3333333333|
XXX2|SSS2|ZZZZZ11|PPPPPP11|1111111112|
XXX2|SSS2|ZZZZZ22|PPPPPP22|2222222223|
XXX2|SSS2|ZZZZZ33|PPPPPP33|333333333344|

What I have already but not working as expected

cat 11 | awk '/AAA/ {printf $2 "|"}; 
/SSS/ {print $2"|"} ; 
/ZZZ/ {printf $2"|"} ; 
/PPPP/ {printf $2"|"}; 
/RRRR/ {gsub(":","",$2); print $2"|"}'

can someone help please?

awk '/^A/ {a=$2} /^S/ {b=$2} /^Z/ {c=$2} /^P/ {d=$2} /^R/ {gsub(/:/, "", $2); print a,b,c,d,$2 OFS}' OFS=\| infile
1 Like

Use printf consistently. Try

awk     '/AAA/                  {TMP=$2};
         /SSS/                  {TMP=TMP "|" $2}
         /ZZZ/                  {printf "%s|%s|", TMP, $2}
         /PPPP/                 {printf "%s|", $2}
         /RRRR/                 {gsub(":","",$2); printf "%s|\n", $2}
        '