2013-11-10 2 views
2

Я задавался вопросом, как я могу извлечь подмножество из столбца/поля с помощью awk?Как извлечь подмножество из столбца/поля с помощью awk?

Здесь входной файл test.txt:

aaa bbb ccc=0.7707;ddd=0.21 

Я хотел бы быть в состоянии извлечь цифру «0,21» из 3-го столбца, и вывод его с 1-го и 2-го столбцов:

aaa bbb 0.21 

Я попробовал и использовал код ниже, но не удалось:

awk 'BEGIN { OFS = "\t" } { $4 = /^ddd=(+\d)/ ; print $1,$2,$4 }' test.txt 

Пожалуйста, помогите!

Большое спасибо, TP

ответ

0

Вы можете использовать gsub:

awk 'BEGIN { OFS = "\t" } { gsub(/.*=/, "", $3); print $1,$2,$3 }' text.txt 

Для вашего входа, он дал бы:

aaa bbb 0.21 
+0

Отлично! Он отлично работает! Я поменял его на gsub (/.* ddd = /, "", $ 3), чтобы продолжить извлечение чисел из "ccc", но это не работает для gsub (/.* ccc =. * /, "", $ 3). Я задавался вопросом, можете ли вы сказать мне больше aobut hwat «. *» И как вы извлекаете числа из «ccc». Большое спасибо! – tsunpo

+0

@ user2975959 Вы можете попробовать: 'awk '{a = gensub (/ ccc = ([^;] *). * /," \\ 1 "," g ", $ 3); gsub (/.*/, a, $ 3); print $ 1, $ 2, $ 3} 'filename' – devnull

+2

@devnull Важно отметить, что 'gensub' является' gnu awk' командой. – Jotne

1

Можно указать несколько разделителей с помощью -F флаг или настройки FS в BEGIN блоке. Например:

echo "aaa bbb ccc=0.7707;ddd=0.21" | awk -F "[ =]" '{ print $1, $2, $NF }' 

Результаты:

aaa bbb 0.21 
+2

Когда его только два поданных сепаратора, вы можете сделать '-F" | = "' – Jotne

0

Другой awk

awk '{split($3,a,"=");print $1,$2,a[3]}' 
aaa bbb 0.21 
+0

Отлично! Затем я использую 2 разделения для извлечения чисел для ccc: awk '{split ($ 3, a, "ccc ="); split (a [2], b, ";"); print $ 1, $ 2, b [1]} 'test.vcf. Большое спасибо! – tsunpo

Смежные вопросы