Показать статистику
0 голосов
от (2.5тыс. баллов)
редактировать от
Как используется команда cut?
2.7тыс. просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)
редактировать от

Команда cut используется для вырезания разделов стандартного входного потока или файлов данных с использованием утилиты вырезания Unix. Она является частью пакета GNU Coreutils и базовой системы BSD и, следовательно, доступна по умолчанию во всех системах Linux и BSD . Команда вырезания в Unix позволяет вырезать секции на основе позиций байтов, символов или полей, разделенных разделителем, таким как символы «-» или «:». Это руководство содержит практическое введение в команду Linux cut с использованием тщательно подобранного набора примеров. Попробуйте их  для получения опыта.

Примеры команды Cut в Unix

Это руководство будет удобным не только новичкам. Оно также послужит удобным ориентиром для опытных пользователей. Во время демонстрации будет использован  как стандартный ввод, так и справочный файл. Вы можете скопировать и вставить содержимое файла отсюда и создать его в своей системе.

Ссылочный файл, используемый для демонстрационных целей

Мы используем текстовый файл с именем test.txt, находящийся в домашнем каталоге. Файл содержит пять строк или линий, каждая из которых содержит четыре столбца. Каждая строка включает название страны, ее столицу, валюту и население; все разделены двоеточием. Создайте этот файл в своей системе и заполните его содержимым ниже.

France: Paris: Euro: 65 million
Austria: Vienna: Euro: 8 million
Turkey: Ankara: Lira: 79 million
Belgium: Brussels: Euro: 11 million
Japan: Tokyo: Yen: 126 million

Синтаксис команды Cut в Unix

Команда Linux cut имеет следующий синтаксис:

cut OPTION... [FILE]...

OPTION включает b (byte-based cutting - байт на основе резки), 

f (field -поле), (character-символ), d (delimiter-разделитель), complement, и –output-delimiter.

FILE - это имя файла. Мы также покажем, как работает cut со стандартным потоком ввода.

Чтобы вырезать текст из входного потока, мы будем использовать команду echo и передадим (|) его вывод в команду cut. Тот же самый метод может использоваться для обеспечения ввода из cut/

Вырезать текст на основе Byte Positions

Опция b, предоставляемая утилитой cut, позволяет нам вырезать фрагменты текста на основе их позиции в байтах. Для этого нам нужно использовать команду cut с флагом -b, за которым следуют байтовые номера.

1. Вырезать только один байт из входного потока

$ echo "cutting text from input" | cut -b 1

Приведенная выше команда выводит строку «cutting text from input» в стандартный вывод и передает ее в качестве ввода в команду вырезания. Команда cut обрежет только первый байт ( c ) из этой строки, поскольку только 1 был предоставлен с флагом -b .

2. Вырезать определенные байты из входного потока

$ echo "cutting text from input" | cut -b 1,3

Эта команда будет вырезать только первый и третий байт строки «cutting text from input» и будет отображать « ct » в качестве вывода. Попробуйте это с различными позициями байтов.

3. Вырезать диапазон байтов из входного потока

$ echo "cutting text from input" | cut -b 1-12

Приведенная выше команда обрезает диапазон байтов 1-12 из заданной строки и выводит «cutting text» на стандартный вывод. Предоставление диапазонов байтов, которые находятся вне области действия строки, приведет к сообщению, показывающему “cut: invalid byte or character range”   ( «cut: недопустимый байт или диапазон символов» ).

4. Вырезать только один байт из текстового файла

$ cut -b 1 test.txt

Эта команда будет отображать только первые байты каждой из пяти строк в файле test.txt . Это эквивалентно команде 

$ cat test.txt | cut -b 1

5. Вырежьте определенные байты из текстового файла

$ cut -b 1,3 test.txt

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

6. Вырезать диапазон байтов из текстового файла

$ cut -b 1-12 test.txt

Эта команда выведет первый-двенадцатый байты каждой строки в файле test.txt . Вы должны заметить сходство функциональных возможностей этой команды с 3-й командой.

7. Вырежьте первые 7 байтов в алфавитном порядке

$ cut -b 1-7 test.txt | sort

Мы можем предоставить выходные данные команды cut как входные данные команды sort для отображения первых семи байтов каждой строки в алфавитном порядке. Для сортировки по алфавиту команда sort не требует никаких параметров.

8. Вырежьте первые 7 байтов в обратном порядке.

$ cut -b 1-7 test.txt | sort -r

Эта команда вырезает первые 7 байтов из каждой строки и выводит их в обратном порядке. Посмотрите, как вывод команды cut передается команде sort с использованием канала.

9. Вырезать из пятого байта до конца входного потока

$ echo "cutting text from input" | cut -b 5-

Приведенная выше команда обрезает текст от пятого байта до конца строки. Эта команда пригодится, когда вам нужно вырезать из указанной позиции байта до конца входного потока. Просто измените значение флага b, не изменяя трейлинг.

10. Вырезать из пятого байта до конца файла

$ cut -b 5- test.txt

Эта команда начнет вырезать каждую из пяти строк test.txt из позиции пятого байта и завершится только после окончания каждой строки. Конечный дефис (-) является обязательным для этой операции.

11. Вырежьте указанное количество байтов, начиная с первого

$ echo "cutting text from input" | cut -b -5

Эта команда обрезает первые пять байтов входной строки. Вы можете сократить начальный байт до любой другой байтовой позиции, просто заменив значение флага b. Не забудьте добавить предыдущий дефис (-), иначе результат будет не таким, как ожидалось.

12. Вырезать из первого байта в заданную позицию из файла

$ cut -b -5 test.txt

Приведенная выше команда будет вырезать только первые пять байтов каждой строки из нашего текстового файла. Обратите внимание, как дефис (-) используется для команд 9-12 в этом списке.

Вырезать текст на основе символов

Команда вырезания в Unix позволяет пользователям вырезать раздел текста на основе символов. При обработке больших задач обработки файлов вам придется делать это довольно часто. Попробуйте их и обратите внимание на сходство между символьным и байтовым режимами.

13. Вырезать только один символ из входного потока

$ echo "cutting text from input" | cut -c 1

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

14. Вырезать определенные символы из входного поток

$ echo "cutting text from input" | cut -c 1,3

Эта команда обрежет только первый и третий символы входной строки и покажет их. Вы можете попробовать вырезать другие символы, но не забывайте превышать ограничение на количество символов в вашей строке.

15. Вырезать диапазон символов из входного потока

$ echo "cutting text from input" | cut -c 1-12

В случае этой команды «cut» будет вырезать символы в диапазоне от первой позиции до двенадцатой позиции. Результатом будет «cutting text ». Обратите внимание на сходство между этой командой Linux cut и третьей командой.

16. Вырезать только один символ из текстового файла

$ cut -c 1 test.txt

Эта команда будет отображать только первые символы каждой из пяти строк нашего файла test.txt. Это эквивалентно команде 

$ cat test.txt | cut -c 1 

и обеспечивает тот же результат, который мы получили бы при использовании байтового флага.

17. Вырезать определенные символы из текстового файла

$ cut -c 7,10 test.txt

Приведенная выше команда вырезает только седьмой и десятый символы из каждых пяти строк. Вы можете указать любые позиции символов, если они попадают в диапазон доступных символов.

18. Вырезать диапазон символов из текстового файла

$ cut -c 1-12 test.txt

Эта команда выведет первый-двенадцатый символ каждой строки в файле test.txt . Команда cut в Unix ведет себя одинаково как при вырезании диапазона символов, так и диапазона байтов.

19. Вырежьте первые 5 символов в алфавитном порядке

$ cut -c 1-5 test.txt | sort

Вы можете предоставить выходные данные команды cut как входные данные для команды sort для вырезания первых пяти байтов каждой строки в алфавитном порядке. Команда сортировки не требует никаких опций при сортировке по алфавиту.

20. Вырежьте первые 5 символов в обратном порядке

$ cut -c 1-5 test.txt | sort -r

Эта команда вырезания обрежет первые пять символов из каждой строки и покажет их после обратной сортировки. Посмотрите, как вывод команды cut передается команде sort с использованием канала.

21. Вырезать из пятого символа до конца входного потока

$ echo "cutting text from input" | cut -c 5-

Приведенная выше команда обрезки обрежет текст, начиная с пятого байта до конца строки. Это может быть полезно, когда вам нужно вырезать из указанной позиции символа до конца входного потока. Просто измените значение после b, сохраняя trailing – on.

22. Вырезать из пятого символа в конец файла

$ cut -c 5- test.txt

Эта команда начнет вырезать каждую из пяти строк файла test.txt с позиции их пятого символа и завершится после достижения конца каждой строки. Конечный дефис (-) является обязательным для этого вида операций.

23. Вырежьте указанное количество символов, начиная с первой позиции

$ echo "cutting text from input" | cut -c -5

Эта команда обрезает только первые пять позиций нашего ввода. Вы можете перейти от начального символа к любой другой позиции символа, просто подставив значение -c . Не забудьте добавить предыдущий дефис (-), иначе результат будет не таким, как вы ожидаете.

от (26.4тыс. баллов)
редактировать от
0

Продолжаем...

24. Вырезать из первого символа в заданную позицию из файла

$ cut -c -5 test.txt

Эта команда вырезания в Unix будет вырезать первые пять символов каждой строки из файла test.txt. Обратите внимание, как дефис (-) используется для команд 21-24 в этом списке.

Вырезать текст из столбцов, используя поля и разделители

Команда cut позволяет пользователям очень легко вырезать фрагменты текста. Для этого нам нужно использовать оба флага: d и f. Флаг d обозначает разделители, а  f - поля. Разделители - это специальные символы, которые отделяют раздел текста от других. Общие примеры включают «-», «:» и «» (пробел). Ссылочный файл, который мы используем, имеет разделитель «:».

25. Вырежьте первый раздел входного потока

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f 1

Приведенная выше команда cut вырезает первую часть текста ( в данном случае «let’s» ) из входного потока. Обратите внимание, что значение флага -d разделителя - это один пробел. Попробуйте это с текстом, разделенным двоеточием, и посмотрите, что произойдет для вас.

26. Вырежьте первый раздел файла

$ cut -d ':' -f 1 test.txt

Эта команда вернет первые столбцы каждой строки в нашем справочном файле и напечатает название всех пяти стран. Значение, предоставленное флагу разделителя, было двоеточием, потому что именно так наш файл разделяет столбцы.

27. Вырезать определенные разделы входного потока

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f 1,2,3

Здесь мы указали cut показать только первые три поля данной входной строки. Это делается с помощью массива полей, разделенных запятыми. Результатом этой команды будет «Let’s cut this».

28. Вырезать определенные разделы файла

$ cut -d ':' -f 1,2,3 test.txt

Эта команда также предоставит тот же вид вывода, что и предыдущая команда. Здесь cut просто работает с файлом вместо стандартного ввода, вот и все. В нем должны быть указаны название, капитал и валюта каждой страны в списке. Однако, обратите внимание на разницу между их разделителями (пробел и двоеточие).

29. Вырезать диапазон полей из входного потока

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f 1-5

Приведенная выше команда обрежет первые пять полей строки и отобразит ее в терминале. Апострофы требуются, когда в качестве разделителя между несколькими полями используется пробел.

30. Вырезать диапазон полей из файла

$ cut -d ':' -f 1-3 test.txt

Эта команда cut будет вырезать каждый из первых трех столбцов нашего текстового файла и показывать его в качестве вывода. Это должно отображать тот же результат, что и команда, предшествующая предыдущей. Апострофы не обязательны для таких символов, как – or: .

31. Вырежьте каждую запись из определенного поля и перечислите их в алфавитном порядке

$ cut -d ':' -f 1 test.txt | awk '{print $1}' | sort

Предположим, вам нужно найти названия пяти стран в нашем списке в алфавитном порядке, для этого вы можете использовать приведенную выше команду. В нем будут перечислены страны в алфавитном порядке. Подстановка в значении флага f позволит вам сделать это и в других полях.

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

$ cut -d ':' -f 1 test.txt | awk '{print $1}' | sort -r

Эта команда выполняет ту же операцию, что и предыдущая, просто сортирует записи в обратном порядке, вот и все. Выходные данные здесь изменяются из-за флага -r, переданного для сортировки.

33. Вырезать из фиксированного поля до конца входного потока

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f 2-

Эта команда cut будет вырезать, начиная со второго поля и до конца строки. Это может быть полезно, когда вам нужно вырезать из указанной позиции до конца ввода. Вы можете изменить значение -f , сохраняя trailing – on для резки из разных полей.

34. Вырезать из фиксированного поля до конца файла

$ cut -d ':' -f 2- test.txt

При таком использовании команда вырезания начнет резку с указанного поля и будет идти до конца каждой строки. В этом случае она распечатает капитал, валюту и население каждой из пяти стран в списке.

35. Вырежьте указанное количество столбцов, начиная с первого

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f -5

Эта команда будет вырезать только первые пять полей данного ввода. Вы можете вырезать из начального столбца любую другую позицию столбца, просто подставив значение -f. Однако вам нужно добавить предыдущий дефис (-), иначе вывод не будет соответствовать вашим ожиданиям.

36. Вырезать некоторые указанные столбцы файла, начиная с первого

$ cut -d ':' -f -2 test.txt

Эта команда cut в Linux начнет вырезать наш файл test.txt из первого столбца и прекратит работу после завершения вырезания второй команды. Таким образом, вывод этой команды будет просто отображать название каждой страны и их соответствующие столицы.

37. Вырезать несколько полей из файлов CSV

$ cut -d ',' -f 1,2 file.csv

Команда cut часто оказывается жизнеспособным инструментом при работе с массивными CSV-документами. Например, приведенная выше команда обрежет первые два столбца CSV-файла, разделенного запятыми, который называется file.csv.

38. Вырезать определенные поля CSV-файлов и сортировать их в обратном порядке

$ cut -d ',' -f 1,3,5 file.csv | sort -r

Приведенная выше команда обрежет первый, третий и пятый столбцы CSV-файла с разделением запятыми с именем file.csv и отобразит выходные данные в обратном порядке.

Некоторые другие команды Linux Cut для экспертов

Команду cut можно использовать для расширенной обработки файлов, используя ее с соответствующими фильтрами и другими надежными командами Linux. Ниже мы рассмотрим некоторые такие команды, которые могут пригодиться вам в долгосрочной перспективе.

39. Проверьте файл passwd с помощью команды Cut

$ cut -d ':' -f1 /etc/passwd

Файл passwd, хранящийся в / etc в большинстве систем, содержит очень конфиденциальную информацию о системе и ее пользователях. Вы можете быстро проверить этот файл с помощью команды cut . Разделитель ':' используется, так как столбцы этого файла разделяются с помощью него. Измените значение -f для мониторинга различных полей.

40. Вырезать определенные поля и показывать только уникальные записи

$ cut -d ':' -f 3 test.txt | uniq -u

Эта команда вырезания в Linux разрезает третий столбец файла test.txt и отображает только уникальные записи. Таким образом, для этого файла вывод будет содержать только три валюты - а именно евро, лиру и иену.

41. Вырезать все байты входного потока, кроме указанных

$ echo "Let's cut this input stream section by section" | cut -b 1,3,5,7 --complement

Эта команда обрезает все символы заданной входной строки, кроме тех, которые указаны для -b . Таким образом, позиции байтов первой, третьей, пятой и седьмой будут исключены из выходных данных.

42. Вырезать все байты файла, кроме указанных

$ cut -b 2,4,6 test.txt --complement

При использовании таким образом команда cut обрезает все байты файла test.txt, кроме указанного в команде. Таким образом, выходные данные не будут содержать второй, четвертый и шестой байты каждой строки.

43. Вырезать все символы входного потока, кроме указанных

$ echo "Let's cut this input stream section by section" | cut -c 1,3,5,7 --complement

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

44. Вырезать все символы файла, кроме указанных

$ cut -c 2,4,6 test.txt --complement

В случае этой команды вывод будет содержать все символы файлов test.txt, кроме упомянутых. Таким образом, символы второго, четвертого и шестого не будут отображаться.

45. Вырезать все входные секции, кроме указанных

$ echo "Let's cut this input stream section by section" | cut -d ' ' -f 1,3,5 --complement

Приведенная выше команда выведет строку «cut input section by section». Таким образом, она будет отображать все входные разделы без тех, которые упомянуты после флага field.

46. Вырезать все столбцы файла, кроме указанных

$ cut -d ':' -f 2,3 test.txt --complement

Эта команда будет вырезать только первый и последний столбцы файла test.txt . Таким образом, вы можете легко отменить выбор некоторых полей при обработке больших табличных документов с помощью флага дополнения.

47. Вырежьте часть ввода и поменяйте их местами

$ echo "Let's cut this input stream section by section" | rev | cut -d ' ' -f 1,3

Приведенная выше команда Linux обрежет первую и третью часть ввода и обратным образом перевернет их. Обратите внимание, как вывод одной команды подается в качестве ввода для других команд.

48. Вырежьте определенные столбцы в файле и поменяйте их местами

$ cut -d ':' -f 1,3 test.txt | rev

Эта команда будет вырезать только указанные поля файла test.txt и отобржать результат в обратном порядке.

49. Измените выходной разделитель команды Cut

$ echo "A,comma,separated,list,for,demonstration,purposes" | cut -d ',' -f 1- --output-delimiter=' '

Cut позволяет нам изменять разделитель вывода при отображении результата. Приведенная выше команда обрезает все разделы списка, разделенного запятыми, но заменяет запятые пробелами при отображении результата.

50. Пример команды Cut + Sed с Tab Delimiter (разделителем табуляции)

$ sed 's/:/\t/g' test.txt | cut -f 1-4

Последняя команда cut нашего списка использует мощную утилиту sed, чтобы заменить двоеточия в нашем файле на вкладки. Вы можете заменить \t другими символами, такими как – or; для изменения на выходной разделитель по вашему выбору.

 

от (26.4тыс. баллов)
+1

Подводя итог

Команда cut в Unix - это универсальный инструмент, который может помочь пользователям, которым часто приходится обрабатывать большие файлы. Мы рассмотрели в общих чертах  лучшие команды Linux cut, чтобы помочь вам ознакомиться с этой утилитой. Вы должны попробовать их индивидуально и внести изменения в различные доступные варианты. Это поможет вам глубже понять различные варианты команды вырезания. Надеюсь, что  руководство максимально поможет вам. 

...