У меня есть команда awk для извлечения информации из точек монтирования (см. принятый ответ в Как извлечь информацию NFS из монтирования в Linux и Solaris?):
awk -F'[: ]' '{if(/^\//)print $3,$4,$1;else print $1,$2,$4}
Я хотел бы включить поиск dig в эту команду awk
для поиска IP имен хостов. К сожалению, команда mount иногда включает IP-адрес, а иногда и имя хоста. Я попробовал следующее, но у него есть нежелательная новая строка, нежелательный код возврата и не работает, если есть IP-адрес:
Для имен хостов
echo "example.com:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'
Возвращает
93.184.216.119
0 /remote/export /local/mountpoint
Для IP-адресов
echo "93.184.216.119:/remote/export on /local/mountpoint otherstuff" | awk -F'[: ]' '{if(/^\//)print system("dig +short " $3),$4,$1;else print system("dig +short " $1),$2,$4}'
Возвращает
0 /remote/export /local/mountpoint
Я хотел бы получить следующее в обоих случаях
93.184.216.119 /remote/export /local/mountpoint
Обновление:
Кажется, что некоторые версии dig
возвращают IP-адрес, когда IP-адрес предоставляется в качестве запроса, а другие ничего не возвращают.
Решение:
Основываясь на принятом ответе, я использовал следующую адаптированную команду awk
:
awk -F'[: ]' '{if(/^\//) { system("dig +short "$3" | grep . || echo "$3" | tr -d \"\n\""); print "",$4,$1 } else { system("dig +short "$1" | grep . || echo "$1" | tr -d \"\n\"");print "",$2,$4 };}'
Дополнительный grep . || echo "$3"
заботится о том, чтобы входной IP-адрес/имя хоста возвращался, если dig ничего не возвращает.