fan_out_chunks.awk (1455B)
#!/bin/awk #Another awk script for reorganizing data in CSV files. #The necessity here was similar to some of the other files in here, #the data format was too awkward for some process to work with, and this was the quickest way to fix it. BEGIN{ FS="@|;"; } { swp = $1";"$2";"$3";"$4";"$5";"$6; tmp = swp; c = 0; for (i = 7; i <= NF; i++) { c++; tmp = tmp";"$i; if (c % 5 == 0) { print tmp; tmp = swp; } } } #HOW IT WORKS #2927;1;CH0006539198;EUR;200;48543;968@0@91@76@3000;969@0@91@77@1000;970@0@91@78@100 #3824;1;DE000A1EWWW0;EUR;200;48543;968@0@91@76@3000;969@0@91@77@1000;970@0@91@78@100 #2927;1;CH0006539198;EUR;200;48543;968;0;91;76;3000 #2927;1;CH0006539198;EUR;200;48543;969;0;91;77;1000 #2927;1;CH0006539198;EUR;200;48543;970;0;91;78;100 #3824;1;DE000A1EWWW0;EUR;200;48543;968;0;91;76;3000 #3824;1;DE000A1EWWW0;EUR;200;48543;969;0;91;77;1000 #3824;1;DE000A1EWWW0;EUR;200;48543;970;0;91;78;100 # FS="@|;" -> Delimiter is either @ or ; # take first 6 fields, save them into a variable called swp to turn them into a constant # fields 7 to end (NF) fanned out into groups of 5, prefixed by constant swp # on every 5th appended field, print line and reset buffer # it's possible to change the magic number 5 by adding a variable from bash # into BEGIN block -> if (chunk=="") {chunk=5} # if (c % 5) -> if (c % chunk) # call the awk script with -v chunk=<NUMBER>