LINUX.ORG.RU

AWK


0

1

Подскажите, как можно сделать это одним вызовом awk:

echo '1111 2222_3333'|awk '{print $2}'|awk -F '_' '{print $2}'

$ echo '1111 2222_3333'|awk '{print $2}'|awk -F '_' '{print $2}'
3333

$ echo '1111 2222_3333'|awk -F '_' '{print $2}'
3333
dada ★★★★★ ()

Возможно, нужно вот это:

awk '{split($2, a, "_"); print a[2];}'

mky ★★★★★ ()
echo '1111 2222_3333'|awk -F ' |_' '{print $3}'
sin_a ★★★★★ ()
Ответ на: комментарий от sin_a

приведен не совсем удачный пример. Но вот это:

echo '1111 2222_3333'|awk '{print $2}'

нужно выполнить обязательно. Вопрос в том, можно ли повторное вхождение в awk выполнить в первом входе?

anonymus123 ()
Ответ на: комментарий от anonymus123

тебе очевидно нужен split, который посоветовал mky

zolden ★★★★★ ()
Ответ на: комментарий от anonymus123

Но вот это:

echo '1111 2222_3333'|awk '{print $2}'

нужно выполнить обязательно.

Зачем? Изначально результат именно этого ведь всё равно не выводится.

yoghurt ★★★★★ ()
Ответ на: комментарий от sin_a

смысл такой, что вывод первого:

awk '{print $2}'
еще раз обработать ( {print $3} ) , но без конвеера и второго вхождения в awk ... Что то типа:
'{print $2;print $3}'

anonymus123 ()
Ответ на: комментарий от anonymus123

Так?

echo '1111 2222_3333'|awk -F ' |_' '{print $1 " " $2 " " $3}'

Что в результате нужно вывести в данном примере?

sin_a ★★★★★ ()
Ответ на: комментарий от anonymus123

я не понимаю какой результат ты хочешь получить.

$ echo '111 222 333' | awk '{print $2$3}'
222333
dada ★★★★★ ()
Ответ на: комментарий от anonymus123

...вывод первого awk '{print $2}' еще раз обработать...

$ echo '1111 2222_3333' | awk '{ tmp = $2; FS = "_"; $0 = tmp; print $2 }'
3333

Но учти, что при таком подходе нужно возиться с восстановлением оригинального FS если целевых строк больше одной.

unterwulf ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.