Combinando 2 saídas de corte diferentes em um único comando?


15

Eu tenho um arquivo como o seguinte:

1234
ABCD
EFGH

Gostaria de convertê-lo para o seguinte:

2341
BCDA
FGHE

O arquivo real tem 4.000 palavras, então eu gostaria de fazer isso de maneira eficiente. Tentei usar o comando cut -c 2-4,1 file.txt, mas ele produz a mesma saída exata que a entrada. Eu estava pensando em usar 3 comandos diferentes:

cut -c 1 file.txt > temp1.txt
cut -c 2-4 file.txt > temp2.txt
// combine the two with paste or pr

... mas eu preferiria um único comando porque preciso executá-lo várias vezes com pequenas modificações, portanto, executar um comando é menos propenso a erros do que executar 3 comandos por vez.

Existe alguma maneira de combinar as duas instruções de corte em uma? Algo como:

cut -c 1 file.txt | pr (cut -c 2-4 file.txt)

Ou há uma maneira melhor de fazer isto?

Respostas:


8

Usando sed:

sed 's:^\(.\)\(.*\):\2\1:' file.txt

2341
BCDA
FGHE

11

Com cute pastevocê também pode fazer uma linha:

$ cat file
1234
ABCD
EFGH
$ paste --delimiter=''  <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE

+1, para o atalho de colagem. É facilmente compreensível. :)
Ankit

Você também pode usar -d '' em vez de --delimiters=''reutilizar personagens da lista em vez de OAT
rubo77


3
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE

Você pode alterar o separador via "-F" de acordo com seus dados e organizar a ordem dos campos arbitrariamente.


1

Aqui está uma maneira de perl:

perl -F'' -lane 'print @F[1..@F], $F[0]'

Divida automaticamente nos limites das letras, gire um para a esquerda e imprima.


0

Eu encontrei uma alternativa em uma maneira de script:

~$ cut -c2- file.txt>file2.txt
~$ cut -c1 file.txt>file3.txt
~$ paste -d "" file2.txt file3.txt>file4.txt
~$ rm file2.txt file3.txt

O script corta as cadeias em arquivos separados. Em seguida, junte-se a um novo arquivo (file4.txt) e, finalmente, remova os arquivos sobressalentes.

a solução llua é mais limpa para o meu gosto.


-1

Você já tentou rev?

~$ cat filename | rev


3
Dê uma olhada na saída de amostra. Não é um puro reverso, mas um bom pensamento. Se você não conseguir encontrar uma maneira de refazer o trabalho, provavelmente deve excluí-lo, apenas para que não seja votado negativamente e confunda o encadeamento.
slm
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.