Поєднуючи 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 -c 1 file.txt | pr (cut -c 2-4 file.txt)

Або є кращий спосіб зробити це?

Відповіді:


8

Використання sed:

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

2341
BCDA
FGHE

11

З cutі pasteви також можете зробити однолінійний:

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

+1, для ярлика вставки. Це легко зрозуміло. :)
Анкіт

Ви також можете просто використовувати -d ''замість --delimiters=''повторного використання символів зі списку замість
таблиць


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

Ви можете змінити роздільник за допомогою "-F" за вашими даними та впорядкувати порядок полів довільно.


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

Ви спробували rev?

~$ cat filename | rev


3
Погляньте на вибірки. Це не чистий зворотній бік, а гарне мислення. Якщо ви не можете придумати спосіб повторної роботи, то, ймовірно, слід видалити його, лише щоб він не став зворотним і плутати нитку.
slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.