Команда Cut

Thank you for reading this post, don't forget to subscribe! 

Cut – это ути­ли­та команд­ной стро­ки, кото­рая поз­во­ля­ет выре­зать части строк из ука­зан­ных фай­лов или пере­дан­ных дан­ных и выво­дить резуль­тат в стан­дарт­ный вывод. Его мож­но исполь­зо­вать для выре­за­ния частей стро­ки по раз­де­ли­те­лю, пози­ции бай­та и символу.В этой ста­тье мы пока­жем вам, как исполь­зо­вать коман­ду Cut в Linux, на прак­ти­че­ских при­ме­рах и подроб­ных объ­яс­не­ни­ях наи­бо­лее рас­про­стра­нен­ных пара­мет­ров резки.

 

Син­так­сис коман­ды cut следующий:

При исполь­зо­ва­нии коман­ды Cut вы долж­ны исполь­зо­вать один и толь­ко один из сле­ду­ю­щих параметров:

  • -f( –fields=LIST) – Выбе­ри­те, ука­зав поле, набор полей или диа­па­зон полей. Это наи­бо­лее часто исполь­зу­е­мый вариант.
  • -b( –bytes=LIST) – Выбе­ри­те, ука­зав байт, набор бай­тов или диа­па­зон байтов.
  • -c( –characters=LIST) – Выбе­ри­те, ука­зав сим­вол, набор сим­во­лов или диа­па­зон символов.

Дру­гие варианты:

  • -d( –delimiter) – Ука­жи­те раз­де­ли­тель, кото­рый будет исполь­зо­вать­ся вме­сто раз­де­ли­те­ля «TAB» по умолчанию.
  • –complement- допол­нить выбор. При исполь­зо­ва­нии это­го пара­мет­ра выре­зать­ся будут отоб­ра­жать­ся все бай­ты, сим­во­лы или поля, кро­ме выбранного.
  • -s( –only-delimited) – По умол­ча­нию cut будет печа­тать любую стро­ку, не содер­жа­щую сим­во­ла раз­де­ли­те­ля. При исполь­зо­ва­нии этой опции Cut не будут печа­тать стро­ки, не содер­жа­щие разделителей.
  • –output-delimiter- По умол­ча­нию исполь­зу­ет­ся вход­ной раз­де­ли­тель в каче­стве выход­но­го раз­де­ли­те­ля. Эта опция поз­во­ля­ет вам ука­зать дру­гую стро­ку выход­но­го разделителя.

Коман­да cut может при­ни­мать ноль или более вход­ных имен FILE. Если FILE не ука­зан или если FILE уста­нов­лен -, cut будет счи­ты­вать стан­дарт­ный ввод.

Аргу­мент LIST, пере­да­ва­е­мый пара­мет­рам -f, -b и -c может быть целым чис­лом, несколь­ки­ми целы­ми чис­ла­ми, раз­де­лен­ны­ми запя­ты­ми, диа­па­зо­ном целых чисел или несколь­ки­ми цело­чис­лен­ны­ми диа­па­зо­на­ми, раз­де­лен­ны­ми запя­ты­ми. Каж­дый диа­па­зон может быть одним из следующих:

  • N N-е поле, байт или сим­вол, начи­ная с 1.
  • N- от N-го поля, бай­та или сим­во­ла до кон­ца строки.
  • N-M от N-го до M-го поля, бай­та или символа.
  • -M от пер­во­го до M-го поля, бай­та или символа.

 

Коман­да Cut в основ­ном исполь­зу­ет­ся для отоб­ра­же­ния выбран­ных полей из каж­дой стро­ки фай­лов или стан­дарт­но­го вво­да. Если не ука­зан, по умол­ча­нию исполь­зу­ет­ся раз­де­ли­тель «TAB».

В при­ве­ден­ных ниже при­ме­рах мы будем исполь­зо­вать сле­ду­ю­щий файл. Все поля раз­де­ле­ны вкладками.

test.txt

Для отоб­ра­же­ния 1-го и 4-го полей вы долж­ны использовать:

Или, если вы хоти­те отоб­ра­зить с 1-го по 4-е поле:

Что­бы Cut на осно­ве раз­де­ли­те­ля, исполь­зуй­те пара­метр -d, за кото­рым сле­ду­ет раз­де­ли­тель, кото­рый вы хоти­те использовать.

Напри­мер, что­бы отоб­ра­зить 1-е и 3-е поля, исполь­зуя «:» в каче­стве раз­де­ли­те­ля, введите:

Вы може­те исполь­зо­вать любой отдель­ный сим­вол в каче­стве раз­де­ли­те­ля. В сле­ду­ю­щем при­ме­ре мы исполь­зу­ем сим­вол про­бе­ла в каче­стве раз­де­ли­те­ля и печа­та­ем 2-е поле:

Для допол­не­ния спис­ка полей выбо­ра исполь­зуй­те опцию –complement. Это напе­ча­та­ет толь­ко те поля, кото­рые не выбра­ны с опци­ей -f.

Сле­ду­ю­щая коман­да напе­ча­та­ет все поля кро­ме 1-го и 3-го:

 

Что­бы ука­зать выход­ной раз­де­ли­тель, исполь­зуй­те опцию –output-delimiter. Напри­мер, что­бы уста­но­вить выход­ной раз­де­ли­тель _, используйте:

Преж­де чем идти даль­ше, давай­те сде­ла­ем раз­ли­чие меж­ду бай­та­ми и символами.

Один байт состав­ля­ет 8 битов и может пред­став­лять 256 раз­лич­ных зна­че­ний. Когда был уста­нов­лен стан­дарт ASCII, в нем были учте­ны все бук­вы, циф­ры и сим­во­лы, необ­хо­ди­мые для рабо­ты с англий­ским язы­ком. Таб­ли­ца сим­во­лов ASCII име­ет 128 сим­во­лов, и каж­дый сим­вол пред­став­лен одним бай­том. Когда ком­пью­те­ры ста­ли все­мир­но попу­ляр­ны­ми, тех­но­ло­ги­че­ские ком­па­нии нача­ли вво­дить новые коди­ров­ки сим­во­лов для раз­ных язы­ков и для язы­ков, кото­рые содер­жат более 256 сим­во­лов, про­стое сопо­став­ле­ние 1 к 1 было невоз­мож­но. Это при­во­дит к раз­лич­ным про­бле­мам, таким как сов­мест­ное исполь­зо­ва­ние доку­мен­тов или про­смотр веб-сай­тов, и был необ­хо­дим новый стан­дарт Unicode, кото­рый может рабо­тать с боль­шин­ством миро­вых систем пись­ма. UTF-8 был создан для реше­ния этих про­блем. В UTF-8 не все сим­во­лы пред­став­ле­ны 1 бай­том. Сим­во­лы могут быть пред­став­ле­ны от 1 бай­та до 4 байтов.

В сле­ду­ю­щих при­ме­рах мы исполь­зу­ем сим­вол ü, кото­рый зани­ма­ет 2 байта.

Исполь­зуй­те опцию -b( –bytes), что­бы выре­зать часть стро­ки, ука­зав пози­цию байта.

Выбе­ри­те 5-й байт:

Выбе­ри­те 5-й, 9-й и 13-й байты:

Выбе­ри­те диа­па­зон от 1-го до 5-го байта:

На момент напи­са­ния этой ста­тьи вер­сия cut, вклю­чен­ная в GNU coreutils, не име­ла воз­мож­но­сти рез­ки по сим­во­лам. При исполь­зо­ва­нии опции -c Cut ведет себя так же, как при исполь­зо­ва­нии опции -b.

 

Коман­да обрез­ки обыч­но исполь­зу­ет­ся в соче­та­нии с дру­ги­ми коман­да­ми через тру­бо­про­вод. Вот несколь­ко примеров.

 

Выход­ные дан­ные коман­ды getent passwd пере­да­ют­ся на cut­пе­чать 1-го поля с исполь­зо­ва­ни­ем : в каче­стве разделителя.

В сле­ду­ю­щем при­ме­ре cut исполь­зу­ет­ся для уда­ле­ния пер­вых 8 бай­тов из каж­дой стро­ки выво­да коман­ды history.