Объединение 2-х различных обрезных выходов в одной команде?

15

У меня есть файл, такой как следующий:

1234
ABCD
EFGH

Я хотел бы преобразовать это в следующее:

2341
BCDA
FGHE

Фактический файл содержит 4000 слов, поэтому я хотел бы сделать это эффективным способом. Я попытался использовать команду cut -c 2-4,1 file.txt, но она выдает тот же самый вывод, что и ввод. Я думал, что смогу использовать 3 разные команды:

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

... но я бы предпочел одну команду, потому что мне нужно запускать ее несколько раз с небольшими изменениями, поэтому выполнение одной команды менее подвержено ошибкам, чем выполнение 3 команд каждый раз.

Можно ли как-то объединить 2 оператора cut в одно? Что-то вроде:

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

Или есть лучший способ сделать это?

Senseful
источник

Ответы:

8

Использование sed:

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

2341
BCDA
FGHE
llua
источник
11

С cutи pasteвы также можете сделать одну строку:

$ cat file
1234
ABCD
EFGH
$ paste --delimiter=''  <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE
Бернхард
источник
+1, для ярлыка вставки. Это легко понять. :)
Ankit
Вы также можете просто использовать -d ''вместо того, --delimiters=''чтобы повторно использовать символы из LIST вместо вкладок
rubo77
3
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE

Вы можете изменить разделитель через «-F» в соответствии с вашими данными, и произвольно упорядочить порядок полей.

Dejian
источник
1

Вот один из способов с perl:

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

Автоматическое разделение по границам букв, поверните один влево и распечатайте.

Тор
источник
0

Я нашел альтернативу в сценарии:

~$ 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

Скрипт разрезает цепочки в отдельные файлы. Затем присоединитесь к новому файлу (file4.txt) и, наконец, удалите лишние файлы.

раствор llua более чистый на мой вкус.

сюгэндо
источник
-1

Вы пробовали обороты?

~$ cat filename | rev

Карун
источник
3
Посмотрите на пример вывода. Это не чистый оборот, а хорошее мышление. Если вы не можете придумать способ переделать это, вы, вероятно, должны удалить его, просто чтобы он не получил отрицательного ответа и не запутал поток.
СЛМ