Gawk однострочный байтовый интерпретатор, который не рассматривает 1 и 01 как одно и то же - PullRequest
2 голосов
/ 17 января 2020

У меня есть входной файл в виде длинной последовательности байтов с некоторыми примечаниями между ними. Ниже приведен пример.

Я искал простой однострочный текст в gawk для извлечения и печати только некоторых строк, что сначала было тривиально:

gawk '$4==01' input.txt

Это терпит неудачу, когда строка комментария во входном файле содержит номер «1» (без префикса 0) и извлекает обе строки.

Как улучшить однострочник, чтобы «01» соответствовал и '1' не является?

Пример ввода:

00000.000    00 3E 01 09 87
00000.000    57 3F 00 09 87
// Total Errors: 1

Желаемый вывод:

00000.000    00 3E 01 09 87

Фактический вывод:

00000.000    00 3E 01 09 87
// Total Errors: 1

Я пытался принудительно сравнить строки (см. ссылка ), но без удачи: gawk '$4==01""'input.txt и gawk '$4""==01'input.txt оба выводят только // Total Errors: 1, так же, как gawk '$4""==01""'input.txt.

Ответы [ 2 ]

3 голосов
/ 17 января 2020

Вы можете использовать

gawk '$4=="01"' input.txt

См. онлайн-демонстрацию

В вашем коде 01 оценивается как 1 и, следовательно, все строки, где поле 4 могут быть оценены до 1 возвращены. Заключение 01 в двойные кавычки требует строгого сравнения строк.

0 голосов
/ 17 января 2020

Один из возможных способов - использовать регулярные выражения, но я бы хотел иметь более простую альтернативу:

gawk '$4~/^01$/' input.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...