Combinando 2 diverse uscite di taglio in un unico comando?


15

Ho un file come il seguente:

1234
ABCD
EFGH

Vorrei convertirlo nel seguente:

2341
BCDA
FGHE

Il file attuale ha 4.000 parole, quindi vorrei farlo in modo efficiente. Ho provato a usare il comando cut -c 2-4,1 file.txt, ma produce lo stesso output esatto dell'input. Stavo pensando di poter usare 3 diversi comandi:

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

... ma preferirei un singolo comando perché devo eseguirlo più volte con lievi modifiche, quindi eseguire un comando è meno soggetto ad errori rispetto all'esecuzione di 3 comandi ogni volta.

C'è un modo per combinare le 2 dichiarazioni di taglio in una? Qualcosa di simile a:

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

O c'è un modo migliore per farlo?

Risposte:


8

Utilizzando sed:

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

2341
BCDA
FGHE

11

Con cute pastepuoi anche fare un one-liner:

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

+1, per il collegamento incolla. È facilmente comprensibile :)
Ankit

Puoi anche semplicemente usare -d ''invece di --delimiters=''riutilizzare i personaggi da ELENCO anziché TAB
rubo77


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

È possibile modificare il separatore tramite "-F" in base ai propri dati e disporre arbitrariamente l'ordine dei campi.


1

Ecco un modo con perl:

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

Dividi automaticamente ai bordi delle lettere, ruotane uno a sinistra e stampa.


0

Ho trovato un'alternativa in un modo di 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

Lo script taglia le catene in file separati. Quindi unisciti a un nuovo file (file4.txt) e infine rimuove i file di riserva.

la soluzione llua è più pulita per i miei gusti.


-1

Hai provato il rev?

~$ cat filename | rev


3
Dai un'occhiata all'output di esempio. Non è un puro contrario, ma un buon pensiero. Se non riesci a trovare un modo per rielaborare questo, probabilmente dovresti eliminarlo, solo in modo che non venga ridimensionato e confondi il thread.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.