Seu comando funciona muito bem assumindo que a entrada é um arquivo de texto Unix com campos delimitados por tabulação, e que o GNU paste
é usado. Em sistemas não-GNU, você teria que usar
$ for i in {1..4}; do cut -f"$i" A.txt | paste -s - ; done
x row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
column3 2 5 8 11
Observe o argumento -
para paste
, que diz para ler a entrada padrão.
Você definitivamente não quer executar isso em colunas de 450k, já que isso exigiria a leitura do arquivo 450000 vezes. Seria melhor você usar outra solução para isso.
Veja, por exemplo, " Transpondo linhas e colunas ".
Se o comando acima for executado em um arquivo de texto do DOS, ele produzirá a seguinte saída no terminal:
x row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
11
Redirecionar a saída para um novo arquivo e abrir esse arquivo no editor vim
mostrará
x row1 row2 row3 row4
column1 0 3 6 9
column2 1 4 7 10
column3^M 2^M 5^M 8^M 11^M
em que cada ^M
é um caractere de retorno de carro (o caractere extra no final de uma linha de texto do DOS). Esses retornos de carro fazem o cursor voltar ao início da linha, e é por isso que a única coisa visível na última linha do terminal é uma guia e 11
(que sobrescreve as outras colunas).
Verifique se o seu arquivo de entrada é um arquivo de texto Unix executando dos2unix A.txt
.