Например, cut
команда может принимать параметр -f, который в соответствии сman
выберите только эти поля; также выведите любую строку, которая не содержит символа-разделителя, если не указана опция -s
В этом контексте, что такое поле?
Термин «поле» часто ассоциируется с такими инструментами, как cut
и awk
. Поле будет похоже на столбцы данных, если вы возьмете данные и разделите их, используя определенный символ. Обычно персонаж, используемый для этого, является Space.
Однако, как и в случае с большинством инструментов, он настраивается. Например:
awk -F"," ...
- разделяется запятыми (то есть ,).cut -d"," ...
- разделяется запятыми (то есть ,).Этот первый показывает, как awk
автоматически будет разделяться на пробелы.
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
Этот показывает, как cut
разделить на пробелы тоже.
$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.
Здесь у нас есть список данных столбца CSV, который мы используем cut
для возврата столбцов 1 и 4.
$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4
Awk тоже может сделать это:
$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4
Awk также немного лучше разбирается в разных персонажах. Здесь он имеет дело Tabsнаряду с , Spacesгде они смешиваются между одновременно:
$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.
Что касается этого переключателя, он просто cut
запрещает выводить строки, которые не содержат символ разделителя, указанный с помощью -d
переключателя.
Скажем, у нас был этот файл.
$ cat sample.txt
This is a space string.
This is a space and tab string.
Thisstringcontainsneither.
ПРИМЕЧАНИЕ. Во 2-й строке выше есть пробелы и символы табуляции.
Теперь, когда мы обрабатываем эти строки, используя cut
и без -s
переключателя:
$ cut -d" " -f1-6 sample.txt
This is a space string.
This is a space
Thisstringcontainsneither.
$ cut -d" " -f1-6 -s sample.txt
This is a space string.
This is a space
Во 2 - ом примере вы можете увидеть , что -s
переключатель опущен любые строки из вывода , которые не содержат разделитель, Space.
Поле в соответствии с POSIX - это любая часть строки, разделенная любым из символов в IFS
« разделителе входного поля (или внутреннем разделителе поля )». Значением по умолчанию является пробел, за которым следует горизонтальный табулятор, за которым следует новая строка , С Bash вы можете запустить, printf '%q\n' "$IFS"
чтобы увидеть его значение.
echo '$IFS' | cat -vet
чтобы увидеть, как выглядит значение по умолчанию вshell
.cut
которых был задан вопрос.cut -d "$IFS"
будет и ошибка, тогда какawk -F"[ \t\n]"
работает как ожидалосьЭто зависит от рассматриваемой утилиты, но
cut
«поле» начинается в начале строки текста и включает все до первой вкладки. Второе поле начинается с символа после первой вкладки и до следующей вкладки. И так далее для третьего, четвертого ... Все между вкладками, или между началом строки и вкладкой, или между вкладкой и концом строки.Если вы не укажете разделитель полей с опцией "-d":
cut -d: -f2
вы получите все между первым и вторым двоеточием (':') символов.Другие утилиты имеют разные определения, но символ табуляции является обычным.
awk
Это хороший запасной вариант, еслиcut
он слишком строг, посколькуawk
разделяет поля на основе одного или нескольких пробельных символов. Это немного более естественно во многих ситуациях, но вы должны знать немного синтаксиса. Чтобы напечатать второе поле в соответствии сawk
:sort
это тот, который обманывает меня. Моя текущаяsort
страница руководства говорит что-то вроде «непустой переход к пустому» для разделителя полей. По некоторым причинам требуется несколько попыток, чтобыsort
правильно определить поля.join
по-видимому, используются поля «разделенные пробелами», что иawk
подразумевается по умолчанию.Мораль этой истории - быть осторожным и экспериментировать, если вы не знаете.
источник
Термин «поле» относится не к Linux в целом, а к конкретным программам. Так что
cut
использует другой вид поля, чемsort
.С помощью
cut
вы сами определяете, что такое поле, указав разделитель полей с помощью опции -d, которая разделяет поля в каждой строке.Если ваши данные разделены двоеточиями в строках, вы можете объединить
-d
и-f
получить поля (или столбцы) 2, 3 и 6 следующим образом:источник
Когда вы используете
cut
команду, тогда она принимает два основных аргументаЗдесь
output
разделитель будет разделен символом "|" и он будет вырезать только 2 поля из входного файлаЕсли у вас есть следующие строки в вашем файле
Затем он будет вырезать 2 поля, которые
источник
cut
отлично подходит для простых случаев, когда разделитель представляет собой один символ, и вы хотите вывести подмножество полей ввода в том же порядке (даже если я укажу-f3,2,1
, он действует так же, как-f1,2,3
).awk
однострочники гораздо более гибкие, например, когда разделителем входного поля может быть любой пробел (поawk
умолчанию) или когда вы хотите вывести поля в другом порядке или в определенном формате.Например,
wc -l myfile | awk '{print $1}'
илиls -l file1 file2 | awk '{printf "%s,%s:%s\n", $9, $7, $3}'
очень просты, но это будет трудно сделатьcut
.Я согласен с более ранними постерами, что поля / ключи
sort
трудно понять! Поля в,join
кажется, работают так же, как и вcut
, хотяjoin
опции легко ошибиться.источник