Nano Hash - криптовалюты, майнинг, программирование

UNIX awk: напечатать строку с CLICKS, если * на поз. 7 пропустить строку, если содержит \ concat следующая строка, если в следующей строке есть * concat 3-я строка

Мне нужно напечатать строку из файла, которая содержит «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
04.10.2017

  • Не могли бы вы быть более ясным, совсем не ясно, например, по какой логике вы хотите пропустить строки. 04.10.2017
  • мне нужно напечатать строку, содержащую шаблон CLICK, который не прокомментирован, например, строки с номерами 000001 и 000002 на входе, но если строка также содержит шаблон '\', тогда мне нужно также объединить следующую строку, теперь, если эта следующая строка прокомментировано, затем пропустите эту строку и объедините 3-ю строку примера: строка 000002 печатается, а строка 000004, но 000003 пропускается 04.10.2017

Ответы:


1
$ cat tst.awk
$1 ~ /\*$/ { next }
saved != "" {
    sub(/^[^[:space:]]*[[:space:]]+/," ")
    print saved $0
    saved = ""
}
/CLICK/ {
    if ( /\\$/ ) {
        saved = $0
    }
    else {
        print
    }
}

$ awk -f tst.awk file
000001  HECTOR CLICK MOUSE
000002  ANNE CLICK MOUSE \ AND PRESS KEYBOARD
000006 MIKE CLICK MOUSE \ AND PRESS KEYBOARD \

Пропускайте каждую строку комментария. Для каждой второй строки: когда мы находим строку, содержащую CLICK, если она заканчивается обратной косой чертой, сохраняем ее, иначе распечатываем. Для каждой строки, если у нас есть сохраненная строка, напечатайте ее перед текущей строкой. Sub() должен изменить начальное число и пробелы на один пустой символ перед печатью текущей строки в конце сохраненной строки.

04.10.2017
  • эй, Эд, не могли бы вы объяснить свое решение, почему мы используем sub(/^[^[:space:]]*[[:space:]] для меня не имеет смысла, также я пробовал это со всем моим каталогом, но он не возвращает никаких записей в моем внешнем файле.. я ценю ваши усилия.. PS: я использую kornshell 04.10.2017
  • Я добавил поясняющий текст. Дайте мне знать, если у вас есть какие-либо конкретные вопросы. Вы также можете добавить к нему отладочные операторы печати, чтобы увидеть, что он делает. Если это не работает с вашими реальными файлами, то наши настоящие файлы не выглядят так, как предоставленный вами пример ввода. awk не имеет абсолютно никакого отношения к какой-либо оболочке, опубликованный скрипт будет работать в любой оболочке UNIX или в Windows. 04.10.2017
  • я не понимаю, почему мы используем save != { sub(/^[^[:space:]]*[[:space:]]+/, ) print save $0 save = } .. какая польза от [: пространство] 04.10.2017
  • У вас есть сохраненная строка, например 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.2017
  • к сожалению, на самом деле это не фильтрует закомментированную строку 05.10.2017
  • при использовании CAT он не работает, так как говорит, что сохранено не найдено, когда я использую awk' вместо cat, он работает, но не фильтрует закомментированный код для источника в $(cat pme.lsk) do awk '/^.... .. +/{ следующий } сохранен != { sub(/^[^[:space:]]*[[:space:]]+/, ) печать сохранена $0 сохранена = } /CLICK/ { if ( /\\ $/) {сохранено = $0} else {print} }' $source *› outfilek1 выполнено 05.10.2017
  • Извините, но я не могу понять, что означают while 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
  • Большое спасибо .. я исправил свой код, и он работает как сон .. я удалил кошку, кстати 05.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..