I have a input file as follows:
MB1 00134141
MB1 12415085
MB1 13253590
MB1 10598105
MB1 01141484
...
...
MB1 10598105
I want to combine 5 lines and merge it into one line. I want my bash script to process the bash script to produce output as follows:
MB1 00134141 MB1 12415085 MB1 13253590 MB1 10598105 MB1 01141484
...
...
...
I have written following script and it works but it is slow for file of size 23051 lines. Can I write a better code to make it faster?
#!/bin/bash
file=timing.csv
x=0
while [ $x -lt $(cat $file | wc -l) ]
do
line=`head -n $x $file | tail -n 1`
echo -n $line " "
let "remainder = $x % 5"
if [ "$remainder" -eq 0 ]
then
echo ""
fi
let x=x+1
done
exit 0
I tried to execute the following command but it messes up some numbers.
cat timing_deleted.csv | pr -at5
In pure bash, with no external processes (for speed):
while true; do
out=()
for (( i=0; i<5; i++ )); do
read && out+=( "$REPLY" )
done
if (( ${#out[@]} > 0 )); then
printf '%s ' "${out[@]}"
echo
fi
if (( ${#out[@]} < 5 )); then break; fi
done <input-file >output-file
This correctly handles files where the number of lines is not a multiple of 5.