2017-01-16 6 views
1

Я пытаюсь сделать без учета регистра ВПР, используя AWK для 1-го столбца в файле, но его игнорирование IGNORECASE и не соответствует в нижнем регистре также используют тот же AWK, как сравнивать 3-ю колонкурегистронезависимы AWK ВПР

awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}' 

cat f1.txt 
FOO,LONDON,45,789 
goo,US,46,9876 

cat f2.txt 
FOO,LONDON,45,789 
GOO,US,46,9876 


awk -F, 'BEGIN{IGNORECASE=1} FNR==NR{a[$1]=$3","$4;next} {print (($1 in a) ? $0","a[$1] : $0",NA,NA");}' f1.txt f2.txt 

FOO,LONDON,45,789,45,789 
GOO,US,46,9876,NA,NA 

ответ

0

Смотрите следующий отрывок из GNU Awk страницы,

Другой метод, специфичные для поглазеть, чтобы установить переменную IGNORECASE в ненулевое значение (см Встроенные переменные). Когда IGNORECASE не равен нулю, все операции с регулярным выражением и строкой игнорируют регистр.

В общем случае вы не можете использовать IGNORECASE, чтобы сделать определенные регистры нечувствительными к регистру и другим правилам чувствительными к регистру, так как нет простого способа установить IGNORECASE только для шаблона определенного правила.17 Для этого используйте либо выражения скобок или tolower(). Тем не менее, одна вещь, которую вы можете сделать только с IGNORECASE, - это динамическое включение или выключение чувствительности к регистру для всех правил сразу.

Так используйте функцию GNU Awk'stolower() для ввода как,

awk -F, 'FNR==NR{a[tolower($1)]=$3","$4;next} {print ((tolower($1) in a) ? $0","a[tolower($1)] : $0",NA,NA");}' f1.txt f2.txt 
FOO,LONDON,45,789,45,789 
GOO,US,46,9876,46,9876 
+0

Да он работает (есть ссылка на сайте IGNORECASE не будут работать на массивах), как шаблон матч за 3-й столбец вместо первого столбца –

+0

@ Inian, как сопоставить шаблон для третьего столбца вместо первого столбца. но оба файла имеют смешанную комбинацию букв верхнего и нижнего регистра, в этом случае они преобразуются в нижний регистр и выполняют совпадение. –

+0

@ sam_84: Это совершенно новый вопрос, выходящий за рамки этого. Можете ли вы спросить об этом как о новом, с вашим вводом и требуемым выходом? – Inian