Git-bash UNIX: Alterna colunas / campos usando o corte?

0

Então eu tenho um arquivo com 2 colunas da seguinte forma:

  10  1
  11  2
  12  3
  13  4
  14  5

Eu gostaria de mudar as colunas usando o comando cut. Eu usei

paste <(cut -f2 file.dat) <(cut -f1 file.dat)

E está me dando o seguinte:

  10  1  10  1
  11  2  11  2
  12  3  12  3
  13  4  13  4
  14  5  14  5

Alguém sabe como posso usar cut e paste para alternar as colunas? Eu pensei que o cut -f1 ou cut -f2 iria cortar cada campo, mas aparentemente não? O que estou fazendo errado aqui?

ATUALIZAÇÃO: Então, estou usando -d em vez de f e está me dando resultados estranhos e, no entanto, quando eu cat o arquivo, o conteúdo permanece inalterado?

    
por CodingNoob 08.06.2018 / 00:46

2 respostas

2

O delimitador padrão para cut é um caractere de tabulação - se você quiser cut dados separados por espaço, precisará especificar isso usando o argumento -d .

Seu arquivo de entrada parece usar vários espaços que dificultam:

paste <(cut -d' ' -f5 file.txt) <(cut -d' ' -f3 file.txt)
1   10
2   11
3   12
4   13
5   14

ou você pode substituir espaços por guias (eliminar repetições) - observe que os campos se tornam -f3 e -f2 porque seu arquivo tem espaço em branco principal:

paste <(tr -s ' ' '\t' < file.txt | cut -f3) <(tr -s ' ' '\t' < file.txt | cut -f2)

Nesse caso, seria mais simples usar awk , por exemplo,

awk '{print $2,$1}' file.txt

ou

awk '{print $2,$1}' OFS='\t' file.txt

se você quiser uma saída separada por tabulação (como você usaria em paste ) ex.

$ awk '{print $2,$1}' OFS='\t' file.txt
1   10
2   11
3   12
4   13
5   14
    
por 08.06.2018 / 00:51
0

Então, imaginei o que queria fazer com o seguinte:

cut -d' ' -f1 file.txt > f1.txt

Para recortar e anexar a primeira coluna a um novo arquivo f1.txt

cut -d' ' -f4 file.txt > f2.txt

Para recortar e anexar a segunda coluna a um novo arquivo f2.txt

paste f2.txt f1.txt > file.txt

E, finalmente, substituir o arquivo original.txt por colunas comutadas.

    
por 08.06.2018 / 05:09