эхо "$ myvar" | awk 'FNR….' не отгоняет ничего

Вопрос:

Я нахожусь в списке машин и получаю всю их системную информацию (модель, аппаратный адрес и т.д.).

Информация, которую я получаю, приходит красиво и аккуратно организована, чтобы легко использовать awk, чтобы захватить нужную мне информацию. Однако, что не работает, FNR выбирает конкретную строку:

entry=$(tssh -n 10 $host 'smbios-sys-info')
echo "$entry" | awk 'FNR == 2 {print $3 $4}'

Если я удаляю FNR, awk ‘{print $ 3 $ 4}’ работает только отлично, но дает мне поле 3 и 4 всех строк вместо одной строки, которую я хочу.

Если я делаю это за пределами скрипта в оболочке, это работает:

smbios-sys-info | awk 'FNR == 2 {print $3 $4}'

Я предполагаю, что могут быть некоторые основные последствия использования эха «$ entry» (переменная в кавычках), которые каким-то образом влияют на способность awk выбирать определенную строку, хотя «$ entry» сохраняет формат smbios-sys-info.

Чтобы дать вам представление, вот что выводит команда smbios-sys-info:

[root@host ~]# smbios-sys-info
Libsmbios version:      2.2.26
Product Name:           OptiPlex 760
Vendor:                 Dell Inc.
BIOS Version:           A02
System ID:              123456
Service Tag:            ABCDEFG
Express Service Code:   11111111111
Asset Tag:              N/A
Property Ownership Tag: N/A

EDIT Я понимаю, что альтернатива заключается в том, что я, вероятно, могу использовать awk в команде ssh, чтобы захватить одно поле вместо всех полей. Но это не хорошо для моей ситуации, потому что мне нужно делать несколько вещей с системной информацией, поэтому проще всего захватить все в один снимок, а затем работать с ним локально.

Лучший ответ:

FNR Номер входной записи в текущем входном файле.

NR Общее количество записей ввода, которые были просмотрены до сих пор.

здесь, с моим awk (Gnu awk 4.1.0), работали как NR, так и FNR. но если у вас нет файла в качестве ввода, лучше используйте NR.

@rici Проблема в том, что действительно старые awk не реализуют FNR как специальную переменную; только NR.

Оцените статью
TechArks.Ru
Добавить комментарий