Получение числовой подстроки полей с помощью awk

Мне было интересно, как я могу получить числовую подстроку полей, используя awk в текстовом файле, как показано ниже. Я уже знаком с функцией substr(). Однако, поскольку длина полей не фиксирована, я понятия не имею, как отделить текст от числовой части.

A.txt

"Asd.1"
"bcdujcd.2"
"mshde.3333"
"deuhdue.777"

P.S. Все числа отделяются от текстовой части одной точкой (.).


person user3684042    schedule 26.08.2014    source источник


Ответы (3)


Вы можете попробовать так:

rt$ echo "bcdujcd.2"|awk -F'[^0-9]*' '$0=$2' 
person Rahul Tripathi    schedule 26.08.2014
comment
Спасибо. Но я не понял, в чем смысл эхо-части?!!1 - person user3684042; 26.08.2014
comment
@ user3684042: - Это было просто повторением результата. Вы можете использовать его без этого! - person Rahul Tripathi; 26.08.2014

Если вы не заботитесь о каких-либо нецифровых частях строки и хотите видеть только цифровые части в качестве вывода, вы можете использовать:

awk '{gsub(/[^[:digit:]]+/, " ")}7' A.txt

который будет генерировать:

 1
 2
 3333
 777

в качестве вывода (в каждой строке для записи есть начальный пробел).

Если в строке может быть только одно числовое поле, то приведенная выше замена может быть "" вместо " " в gsub, и начальный пробел исчезнет. Замена пробелом сохранит несколько числовых полей, разделенных пробелом, если они находятся в одной строке. (т. е. "foo.88.bar.11" становится 88 11 вместо 8811).

Если вам просто нужно второе (с разделителем точек) поле каждой строки такого рода, тогда awk -F. '{print $2}' сделает это.

person Etan Reisner    schedule 26.08.2014

person    schedule
comment
Что делать, если я хочу сохранить пробел в качестве разделителя между полями и просто хочу разделить один столбец на основе точки (.)? - person user3684042; 26.08.2014
comment
самоотвечающий вопрос: найдите split в руководстве gawk: gnu.org/software/gawk/manual/html_node/ - person glenn jackman; 26.08.2014
comment
@ user3684042 glenn прав, но обновите свой вопрос с исправленным образцом ввода/вывода, чтобы показать нам, что вы имеете в виду. - person Ed Morton; 26.08.2014