Use colar com entrada principal de linha

4

Eu posso criar um arquivo com várias colunas a partir de uma entrada de coluna única via paste , assim:

some_command | paste - -

Isso funciona quando some_command produz os dados no formato principal da coluna. Em outras palavras, a entrada

1
2
3
4

resulta na saída

1   2
3   4

No entanto, quero o oposto, ou seja, eu quero

1   3
2   4

Histórico: eu quero coletar todas as colunas N th dos arquivos M em um arquivo agregado. Eu tentei fazer isso via:

cut -f 5 "${files[@]}" | paste - - - - - …

(com M - s). Mas, como mencionado anteriormente, isso não funciona, pois paste espera entradas importantes na coluna. Não posso deixar de pensar que deveria haver uma solução coreutils (ou pura Bash) para isso.

    
por Konrad Rudolph 04.12.2014 / 17:57

1 resposta

5

Se eu entendi corretamente a pergunta, você pode tentar com pr :

cut -f 5 "${files[@]}" | pr -5 -s' ' -t -l 40

em que -5 é o número de colunas, -s' ' é o separador (espaço) e -l 40 é o tamanho da página (40 linhas).

Sem coreutils , pode-se usar split para criar partes de linhas N :

split -lN infile

ou

some_command | split -lN

e depois paste juntos:

paste x* > outfile
rm x*
    
por 04.12.2014 / 18:14