%20%D0%B4%D0%BE%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%BE%D0%B2.png)
Я использую Win7 с Cygwin. У меня есть однострочный код, который будет работать для определения совпадений в ПАРЕ столбцов, но когда я пытаюсь ввести дополнительные столбцы (например, >2), я не могу заставить его работать. Поэтому следующее работает для меня:
gawk -F "^" '{ if ($3 == $7) print "0"; else print $3,$7; }' infile.txt > outfile.txt
Однако при добавлении еще пары столбцов возникают синтаксические ошибки:
gawk -F "^" '{ if ($3 == $7 || $3 == $11) print "0"; else print $3,$7,$11; }' infile.txt > outfile.txt
Итак, что-то не так с командой, но сообщения об ошибках мне не особо помогают. Когда я заменяю "&&" на "||", я также получаю ошибки ("неожиданный символ новой строки или конца строки" сразу после первого "$7", а также "$3 не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл").
Итак, вот пример входного файла, содержащего три строки с «^» в качестве разделителя столбцов:
paris^london^new york^paris^rome^paris
paris^london^munich^paris^rome^paris
paris^london^munich^berlin^rome^paris
Я хочу иметь возможность увидеть, соответствуют ли друг другу в каждой строке файла столбцы 1, 4 и 6. В этом случае строка 1 — это «да», строка 2 — это «да», а строка 3 — это «нет». Поэтому вывод должен показывать либо «0» для «да», либо повторять всю строку для «нет». Таким образом, вывод будет следующим:
0
0
paris^london^munich^berlin^rome^paris
Есть идеи ?
решение1
Постарайтесь избегать ||
и&&
Для
&&
тестаgawk -F "^" '$3 == $7{if($3 == $11){print "0"; next;}}{print $3,$7,$11}'
Для
||
тестаgawk -F "^" '$3 == $7{print "0"; next;}$3 == $11{print "0"; next;}{print $3,$7,$11}'
решение2
Наконец-то понял. Я использую Cygwin с Win7. Одинарные кавычки не годились, поэтому замена ВСЕХ одинарных кавычек на двойные исправила синтаксис, и, кроме того, "||" тоже не годилось, но "&&" работает отлично. Так что следующее работает:
gawk -F "^" "{ если ($1 == $2 && $3 == $4 && $4 == $5 && $5 == $6) вывести 0; иначе вывести $1,$2,$3; }" infile.txt > outfile.txt