Com base na discussão nos comentários, acredito que o que você deseja fazer é escrever uma expressão awk
que use uma sequência de palavras delimitadas por espaço, remova as duas primeiras palavras e depois imprima as palavras restantes em grupos de palavras. 4 ou 8 por linha, com cada linha (exceto possivelmente a última linha) terminando com uma barra invertida. Considere o seguinte exemplo:
echo "a b 1 2 3 4 5 6 7 8 " | \
cut -d' ' -f3- \
| awk '{printf $0 " "} NR%4==0 {print "\"}' RS=' '
Isso produz a seguinte saída:
1 2 3 4 \
5 6 7 8 \
Note que incluí um espaço após a última palavra.
O comando acima remove as duas primeiras palavras e depois imprime as palavras restantes em grupos de 4 palavras por linha, com cada linha seguida por uma barra invertida. Modificar seu comando para usar essa abordagem gera o seguinte:
{ make sources; printf ' '; } | \
cut -d' ' -f3- \
| awk '{printf $0 " "} NR%4==0 {print "\"}' RS=' '
Observe que adicionei um espaço após a saída de make
- apenas no caso.
Como você também pediu alternativas potenciais para awk
, eu mencionarei que eu pessoalmente preferiria usar o Python para esse tipo de coisa. Aqui está um script Python que também deve resolver seu problema:
#!/usr/bin/env python2
# chunk.py
import sys
# Read the data from standard input
words = sys.stdin.readline().split()[2:]
# Set the chunk size
n = 4
# Break up the data into chunks
chunks = []
for i in range(0, len(words), n):
chunks.append(' '.join(words[i:i+n]))
# Print out the reformatted data
print(' \\n'.join(chunks))
Coloque isso em um arquivo (por exemplo, chunk.py
) e execute-o:
echo -e "a b 1 2 3 4 5 6 7 8" | python chunk.py
Isso produz a seguinte saída:
1 2 3 4 \
5 6 7 8