Получаване на цифров подниз от полета с помощта на 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
какво, ако искам да запазя място като разделител между полетата и просто искам да разделя една колона въз основа на dot(.)? - 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