LINUX.ORG.RU

Переменная awk внутри системной команды вызываемой внутри awk


0

1

Есть осознанная необходимость преобразования текста (это вывод скрипта) вида

network_interface1 serial1 name1
network_interface2 serial2 name2
network_interface3 serial3 name3
network_interface4 serial4 name4
в вид
network_interface1 MAC1 name1
network_interface2 MAC2 name2
network_interface3 MAC3 name3
network_interface4 MAC4 name4
Знаю как это сделать некрасиво и неоптимально, но хотелось бы запихать это в однострочник на awk.
Пытался делать нечто вроде такого
script | awk '{system ("ip l l dev $1")....}'
но что-то не выходит каменный цветок (с ошибками Command line is not complete. Try option «help"sh: 255: command not found), подозреваю, внутрь вызова внешних команд нельзя передавать переменные awk
Хотелось бы умных советов и прочих примеров. Спасибо.

★★★★★

Ответ на: комментарий от zolden

Тогда ИМХО проще на bash'е «однострочник» нарисовать

Led ★★★☆☆
()

может тебе так проще будет?

$ echo eth0 | awk '{a=«/sys/class/net/»$1"/address"; getline mac < a; print mac}'
00:1d:7d:e6:85:45

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

Мм...нет (в жизни счастья).
В итоге получается даже длиннее чем этот мой первоначальный вариант в лоб:

$cat print_macs.sh
ifaces=$(initial_slow_script.sh);
paste <(<<<$ifaces) <(for i in $(awk '{print $1}' <<< $ifaces);ifconfig $i | awk '/HWaddr/{print $5}') | awk '{print $1,$4,
$3}' | column -t

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

zolden> В итоге получается даже длиннее чем этот мой первоначальный вариант в лоб:

критерий качества программы — длина в байтах?

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

echo -e «eth1 serial name1\neth2 serial2 name2\neth3 serial3 name3\neth4 serial4 name4» |\

awk '{i=«ip -o l sh »$1; i | getline v; split(v,m," *"); print $1"\t"m[11]«\t»$3 }'

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

Ествественно, а как же иначе.
Как вариант, можно мерять не в байтах, а в пайпах.

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

Спасибо, про split не додумался.
Вы победитель по длине, и соответственно (как мы уже выяснили) и по качеству. С меня по такому случаю печеньки.

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

Вау! Вам надо было в девелопмент с тегом [соревнование] :)

Но мой код весьма оптимистичен, там не проверяется, что линк это «link/ether» .

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