Мне нужно напечатать строку из файла, которая содержит «CLICK» и не прокомментирована (* в позиции 7), например, строка 000001,
если в строке есть CLICK и "\", то соедините и следующую строку, если следующая строка прокомментирована, то пропустите эту строку и соедините следующую: например, строка номер 000002 объединяется со строкой 000004, пропуская строку 000003.
если конкатенированная строка (следующая) также содержит '\', то нам не нужно объединять 3-ю строку, что я имею в виду, что мы удаляем строку из вывода, как мы удалили строки 3 и 5, потому что они не требуются ядро логика, как указано ранее: [если в строке есть CLICK и "\" (оба), затем объединить следующую строку, если в строке есть только CLICK, напечатать только эту строку, все остальные строки удаляются из вывода].
поэтому в этом случае пример: 000006 объединяет строку 000007, но не объединяет 000008, что означает, что 000008 будет удалено из вывода.
ВХОДНОЙ ФАЙЛ:
000001 HECTOR CLICK MOUSE
000002 ANNE CLICK MOUSE \
000003* AND PRESSES KEYBOARD
000004 AND PRESS KEYBOARD
000005* CLARK CLICK MOUSE
000006 MIKE CLICK MOUSE \
000007 AND PRESS KEYBOARD \
000008 AND TAPS SCREEN
выход
000001 HECTOR CLICK MOUSE
000002 ANNE CLICK MOUSE \ AND PRESS KEYBOARD
000006 MIKE CLICK MOUSE \ AND PRESS KEYBOARD \
Я создал это:
awk '
/^...... +/{
if ($0 ~ /CLICK/ && $0 ~ /\\/)
{l1=$0;getline; print l1 $0}
else if
($0 ~ /CLICK/ && $0 !~ /\\/)
{print $0} ;
}' *> outfile
результат довольно близок, но есть две проблемы:
1. the data is written twice
2. commented second line is also printed, i tried /^...... +/ inside the if but it gave error
000002 ANNE CLICK MOUSE \
, и текущая строка, которая выглядит как000004<blank><blank>AND PRESS KEYBOARD
, и вы хотите, чтобы вывод был000002 ANNE CLICK MOUSE \<blank>AND PRESS KEYBOARD
, поэтому нам нужно избавиться от000002
в начале текущей строки и преобразовать все пробелы после нее в один пустой символ. Следовательно, sub().[[:space:]]
— это выражение в квадратных скобках, содержащее класс символов POSIX[:space:]
, который представляет все символы пробела, и его отрицание[^[:space:]]
— это выражение в квадратных скобках, представляющее все символы, отличные от пробелов. 04.10.2017while using CAT it is not working as it says saved not found
иwhen i use awk' instead of cat it works
. Вы пытаетесь использоватьcat
для оценки сценария awk? Когда вы запускаете сценарий, который я разместил, против опубликованного вами ввода, он создает или не создает вывод, который вы опубликовали? Если ответ «нет», отредактируйте свой вопрос и скопируйте/вставьте в точности содержимое вашего входного файла и текст на экране (подсказки, команды, все), как вы выполняете именно мой опубликованный awk команда и вывод, который она производит, чтобы мы могли помочь. 05.10.2017;
, переменная без кавычек, неуместное*
, UUOC, использование зарезервированного слова в качестве переменной и т. д. и т. д.), но не знаю, если они проблемы в вашем реальном коде или являются артефактом того, что вы пытаетесь повторно напечатать свой код в комментарии. В любом случае, мы не можем читать код или что-то еще, что требует форматирования в комментарии, поэтому обновите свой вопрос чем-нибудь подходящим. 05.10.2017