Usando sed
:
sed 's:^\(.\)\(.*\)::' file.txt
2341
BCDA
FGHE
Eu tenho um arquivo como o seguinte:
1234
ABCD
EFGH
Gostaria de convertê-lo para o seguinte:
2341
BCDA
FGHE
O arquivo atual tem 4.000 palavras, então eu gostaria de fazer isso de maneira eficiente. Eu tentei usar o comando cut -c 2-4,1 file.txt
, mas ele produz a mesma saída exata da entrada. Eu estava pensando que poderia 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 eu preciso rodá-lo várias vezes com pequenas modificações, então rodar um comando é menos propenso a erros do que rodar 3 comandos a cada 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 isso?
Com cut
e paste
, você também pode fazer uma única linha:
$ cat file
1234
ABCD
EFGH
$ paste --delimiter='' <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE
Se você usar o bash, use a indexação de strings de expansão de parâmetros :
while IFS= read -r word; do
echo "${word:1:3}${word:0:1}"
done < file.txt
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE
Você pode alterar o separador por meio de "-F" de acordo com seus dados e organizar a ordem dos campos arbitrariamente.
Aqui está uma maneira com perl
:
perl -F'' -lane 'print @F[1..@F], $F[0]'
Divida automaticamente nos limites das letras, gire um para a esquerda e imprima.
Eu encontrei uma alternativa em um 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. Então junte-se a um novo arquivo (file4.txt) E, finalmente, remove os arquivos de reposição.
a solução llua é mais limpa para o meu gosto.
Você já tentou rev?
~$ cat filename | rev
Tags text-processing cut