zsh-5.0.0[t]% awk '{
printf "NR is %d, NR % 7 returns %d <--%s\n",
NR, NR % 7, NR % 7 ? " true" : "-- false"
}' infile
NR is 1, NR % 7 returns 1 <-- true
NR is 2, NR % 7 returns 2 <-- true
NR is 3, NR % 7 returns 3 <-- true
NR is 4, NR % 7 returns 4 <-- true
NR is 5, NR % 7 returns 5 <-- true
NR is 6, NR % 7 returns 6 <-- true
NR is 7, NR % 7 returns 0 <---- false
NR is 8, NR % 7 returns 1 <-- true
NR is 9, NR % 7 returns 2 <-- true
NR is 10, NR % 7 returns 3 <-- true
NR is 11, NR % 7 returns 4 <-- true
NR is 12, NR % 7 returns 5 <-- true
NR is 13, NR % 7 returns 6 <-- true
NR is 14, NR % 7 returns 0 <---- false
NR is 15, NR % 7 returns 1 <-- true
NR is 16, NR % 7 returns 2 <-- true
NR is 17, NR % 7 returns 3 <-- true
NR is 18, NR % 7 returns 4 <-- true
NR is 19, NR % 7 returns 5 <-- true
NR is 20, NR % 7 returns 6 <-- true
NR is 21, NR % 7 returns 0 <---- false
NR is the number of the current record.
So we manipulate the builtin variable ORS (the Output Record Separator).
When the expression returns 0, false, we set it to the default value of RS (input Record Separator): a newline,
otherwise, we set it to the current (in this case, the default) value
of FS (Field Separator) - a single space.
If it is exactly a multiple of 7, below simple 'sed' should be ok for you.
sed -n '{N;N;N;N;N;N;s/\n/ /g;p}' a
If it is somehow not multiple of 7, use below awk.
awk '{
str=$0
pre_nr=NR
for(i=0;i<=5;i++){
getline a
if(NR!=pre_nr)
str=sprintf("%s %s",str,a)
pre_nr=NR
}
print str
}' your file
or below python
a=[]
with open("a.txt") as file:
for line in file:
line=line.replace("\n","")
if len(a)==3:
print(" ".join(a))
a=[line]
else:
a.append(line)
if a:
print(" ".join(a))