Я использую Win7 с Cygwin. У меня есть одна строка, которая будет работать для определения совпадений в PAIR столбцов, но когда я пытаюсь ввести дополнительные столбцы (то есть> 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

Есть идеи ?

2 ответа2

0

Понял наконец. Я использую Cygwin с Win7. Одиночные кавычки были бесполезны, поэтому замена ВСЕХ одинарных кавычек на двойные кавычки исправила синтаксис и, кроме того, «||» не было хорошо, но "&&" работает нормально. Итак, следующие работы:

gawk -F "^" "{if ($ 1 == $ 2 && $ 3 == $ 4 && $ 4 == $ 5 && $ 5 == $ 6) print 0; иначе вывести $ 1, $ 2, $ 3;}" infile.txt> outfile.txt

0

Старайтесь избегать || и &&

  • Для && теста

    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}'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .