2015-07-05 2 views
0

новое для awk и попытаться сделать что-то, что, вероятно, просто, но это заставляет меня немного. Чтобы упростить вещи, у меня есть текстовый файл с именем «образец» и содержит следующую строку:Awk: разделение поля

164516454242451BX% Кв 110 225 1784 Ohio USA

Я хочу, чтобы получить следующий вывод, используя AWK:

Apt 110 225

есть ли способ, что я могу разделить $ 1, так что "кв" это отдельное поле? Код, который я пытаюсь сделать, приведен ниже. Я не получаю ошибки, но вывод состоит всего из двух пустых строк.

awk ' 
BEGIN { 
split($1," ","%") 
} 
print $2,$3,$4 
END { 
print "" 
} ' sample 

ответ

2

Вы можете % как один из ограничителей:

awk -F'[ %]' '{print $2, $3, $4}' file 

То же самое можно сделать с помощью разделить, а также:

awk '{split($1,a,/%/); print a[2], $2, $3}' file 
+0

Работали красиво спасибо !!! – Cro2015

+0

'+ 1'. Третий arg для 'split()' является разделителем полей, который является регулярным выражением с дополнительными свойствами, а не строкой. Разделитель regexp является '/', а не '' ', который является разделителем строк. Awk может создавать регулярные выражения из строк, анализируя контекст, в котором используется строка, чтобы определить, является ли это контекстом регулярного выражения, но лучше всего сохранить код и просто и используйте регулярные выражения regexp для регулярных выражений, если у вас нет конкретной причины: «split ($ 1, a, /% /)». –

+1

@EdMorton Я знаю, что третий arg является регулярным выражением, но не знал, что он не должен быть строкой. Отредактировано так, как вам было предложено. Спасибо за информацию! –