Когда вы проходите через линии с использованием awk
, разделитель полей используется перед обработкой записи. awk
считывает запись в соответствии с текущими значениями FS
и RS
и выполняет операции, которые вы просите.
Это означает, что если вы укажете значение FS
при чтении записи, это не повлияет на эту конкретную запись. Вместо этого, для следующего и за его пределами.
Так что если у вас есть файл, как это:
$ cat a
1,2 3,4
5,6 7,8
И установить разделитель полей при чтении одной записи, он вступает в силу со следующей строки:
$ awk '{FS=","} {print $1}' a
1,2
5
Так что вы хотите сделать это, чтобы установить FS
перед чтением файла. То есть, в блоке BEGIN, или с помощью параметра:
$ awk 'BEGIN{FS=","} {print $1}' a
1
5
$ awk -F, '{print $1}' a
1
5
Существует и другой способ: может awk
пересчитывать полную запись. При этом, awk
будет принимать во внимание текущие FS
и действовать соответственно:
$ awk '{FS=","} {$0=$0;print $1}' a
1
5
Предположим, что моя первая строка 'Cal_Tno_V19_F04_R02'. Как использовать 'awk' для печати' Cal_Tno', т. Е. Для печати первых двух полей с разделителем? – Sigur
@Sigur это, кажется, совершенно другой вопрос к тому, что я отвечал здесь. Лучше, если вы [задаете новый вопрос] (/ questions/ask), предоставляя достаточно подробностей! – fedorqui