Я пытаюсь использовать оператор awk внутри perl-скрипта, который принимает пользовательский ввод и выполняет поиск по нескольким текстовым файлам, чтобы найти строки, которые соответствуют всем словам в вводе в любом порядке. С этой целью я могу выполнить поиск Awk, который я хочу, по CLI следующим образом:
awk 'tolower($0) ~ / 204/ && / test/ && / leg/' *_Codes.txt
При этом будут возвращены строки в ссылочных текстовых файлах, которые включают слова, начинающиеся с «204», «тест» и «нога», например, «левые ноги проверяются в комнате 2045»;
Однако, когда я пытаюсь сделать это в скрипте Perl, устанавливая пользовательский ввод в переменную и изменяя его, чтобы включить операторы и слэши &&
, я ничего не получаю обратно. Вот что у меня есть:
my ($code_search, $code_set) = @_;
# Clean the input for awk
# trim whitespace from the ends
$code_search =~ s!(^\s+|\s+$)!!g;
# separate words with the && operator and slashes
$code_search =~ s!\s+!/ && / !g;
# make input lower case and tack on front and back slashes
my $sanitized_query = lc "/ ${code_search}/";
# at this point, a user input of '204 leg test'
# is transformed to '/ 204/ && / leg/ && / test/'
# and is saved to the $sanitized_query variable
# run the query through awk and save it to $results
my $results = `awk 'tolower($0) ~ \$sanitized_query' *_Codes.txt`;
Но $results
ничего мне не дает.
Возможно, awk не является подходящим инструментом для этой работы, но он лучше подходит для моих нужд, чем grep, так как я хочу убедиться, что могу найти все введенные термины и вернуть результаты там, где они все появляются в строка текста в любом порядке.
Любая помощь очень ценится.