Вопросы с меткой [awk]


Вывести в shell строки, не содержащие

Узнать ответ

ответов 2

0

sed -e 's/#.*$//' -e '/^$/d' filename > result

AWK использовать в качестве разделителя /

Ответить

ответов 0

0

Забавно .... У меня awk -F '/' '{print $NF}' ./Folder/database/data.txt печатает data.txt / ( версия awk --vers GNU Awk 4.1.4, API: 1.1 (GNU MPFR 4.0.1, GNU MP 6.1.2))

0

@avp спасибо, помогла перезагрузка :D

AWK увеличение счетчика

Узнать ответ

ответов 1

0

Если это Linux, забудьте про procfs, и используйте sysfs (/sys/class/net/).

Получение последних строк файлов с условием Ubuntu

Ответить

ответов 0

1

используйте маску файлов *-volume.log

0

да, а как узнать является ли строка имеено ей, ведь мой пример выведет пустую строку если последняя строка не такая. А мне хочется что, если строка 'incorrect' то вывести имя лог файла

0

Тогда да, скрипт надо писать.

0

Хорошо! Благодарю, подскажите тогда пожалуйста, я в .bash плохо понимаю ``` for f in /root/logs; do echo f ; done ; ``` я вот хочу вывести файлы из директории, как мне на них маску задать. И он не выводит файлы говоря что это директрия

0

cyberciti.biz/faq/bash-loop-over-file

Создание строки на основе совпадения в первом столбце списка

Ответить

ответов 0

0

в perl: с помощью хешей, где: ключ - день недели, а массив со значением - месяцы, $VAR1 = { 'Friday' => [ 'Jan', 'Oct'] };

awk, sed - отсеять строки, если в определенном поле строки нет нужного количества символов

awk sed

Узнать ответ

ответов 1

0

А почему собственно не grep? Вроде ж как раз для него задача?

0

sed -r -n 's/^([X]{5}:.*)$/\1/gp' ./file.txt так еще по идее сработает, grep -P '^[X]{5}:' ./file.txt тоже должно сработать

0

Ваш код работает, но вы не заметили что символы не только X а любые произвольные. Если заменить тут 5 на * как-то...

0

А буквы одинаковые должны быть или любая последовательность?

1

sed будет выглядеть следующим образом sed -r -n 's/^([A-Za-z]){5}:/&/p' ./file.txt если последовательность из одинаковых букв или sed -r -n 's/^[A-Za-z]{5}:/&/p' ./file.txt если любая последовательность букв

0

мысль понятна, а есть возможность все же вписать что-то типа * (любой) ? [:print:] ?

0

Да, шаблон замены сделать так 's/^(.)\1{4}:/&/p' должно сработать? но все сломается если выбранным символом будет :, тут он выберет любую последовательность больше 5, есть смысл защититься от этого к примеру исключив из выборки 's/^([^:])\1{4}:/&/p', вообщем на что фантазии хватит))) Протестировать мне негде, в любом случае гарантированно рабочий вариант с awk у вас есть.

Есть ли корректный способ обрабатывать тексты к кириллицей посредством awk?

Узнать ответ

ответов 1

0

приложите, пожалуйста, к тексту вопроса (нажав edit), вывод программы locale

0

Ваш пример у меня работает, если переменные взять в кавычки ...country="$C_NAME" -v line="$LINE"...

0

@aleksandr-barakin приложил

0

@PotroNik так скрипт отрабатывает без ошибок, но на выходе почему-то $2 оказывается в начале строки с разделителем перед собой, затирая несколько первых символов $LINE

0

@SebastianPereira, а если в скрипте указать export LANG=C после #!/bin/bash выводится аналогично?

0

@PotroNik, такой же результат, да

0

Причиной проблемы оказалась моя невнимательность и... некорректный символ завершения строки: \r\n вместо \n Благодарю всех за проявленный интерес и прошу прощения.

Dile

Объединить строки с поиском по шаблону

Узнать ответ

ответов 3

0

Приемы подбные этому perl -pe 's/какой-то текст\n//g', заменяет весь шаблон с переводом строки на пустоту, это может и решает часть задачи, но все же хочется объеденить строки при нахождении "регулярки". И хочется решение именно уровня скрипта в bash, а не С.

Объединить словари в один файл и почистить от дублей, чем?

Узнать ответ

ответов 1

0

например, программа sort. $ sort -u файлы > результат (файлы, естественно, должны быть текстовыми).

0

@aleksandrbarakin для моей задачи скорее cat dict/*.* | sort | uniq > output.txt но справиться ли он с таким большим объемом ? В приоритете скорость выполнения

0

абсолютно ненужное увеличение процессов с одного (предложенного мной) до трёх (предложенных вами) процедуру точно не ускорит. а справится ли ваш диск с таким объёмом информации — вам виднее.

0

@aleksandrbarakin да, действительно, не знал что у sort есть параметр -u

Неверное поведение модификатора i в awk

Узнать ответ

ответов 1

0

для начала, модификаторов на подобии /i в синтаксисе регулярных выражений awk нет... это не перловка... а вот почему он не вызывает ошибку синтаксиса и что именно проверяет это условие я понятия не имею...

0

@Fat-Zer, в man нет, согласен, но где-то я это подсмотрел, а где уже не помню =/

0

можешь поверить, в awk модификаторов регэкспов никогда не было (по крайней мере в POSIX/BSD/GNU вариантах)... они есть для команды s в ed/sed/vi и в перле...

Как записать в файл номера строк перед текстом?

Узнать ответ

5 191
ответов 4

0

2) Да, такое возможно. 1) а) построчно читать файл в цикле б) инкриментировать переменную целочисленного типа в) записывать строку обратно но уже с добавленным значением переменной из п.б.

0

всё, спасибо. тогда ответ не надо. сам разберусь.

0

Я вам код и не собирался писать, я не знаю Bash скриптов, просто знаю что в нем есть всё что нужно для реализации вашей задачи, и в гугле найти инструкцию - дело пары минут. алгоритм - в первом комментарии, операторы - в гугле.

2

$ less -N файл, $ cat -n файл, $ vim -c 'set nu' файл, и т.д. и т.п.

Как работают переменные в AWK

Узнать ответ

ответов 1

0

@alexanderbarakin да, извините, очепятка, там закрывающая ' и после varmask=$name, т.е. последняя строка такая: END {print count_photo,count_mask}' varmask=$name. Но от этого ничего не меняется, очепятка была только тут на форуме.

0

@alexanderbarakin что? #!/usr/bin/env bash t1='prnt' ls -f ./ | awk '{print var}' var=$t1 $ ./testrn.sh prnt prnt prnt prnt prnt prnt

0

да, вы правы. gnu/awk (других реализаций сейчас под рукой нет) «проглатывает» такую ошибку.

0

@alexanderbarakin а почему вы считаете это ошибкой? Это обычное задание переменной. В man такого нет - из книжки вычитал, да и в интернетах видал вроде.

0

поразмышляйте над результатом такого примера: $ echo -e 'a\nb' | awk '{print x} x++' и $ echo -e 'a\nb' | awk 'x++ {print x}'

0

@alexanderbarakin это из разряда $ echo -e 'a\nb' | awk '{print x} x++' и $ echo -e 'a\nb' | awk '{print x} ++x'. По вашим примерам в первом случае идёт print пустого x, после инкрементирование и становление его 1. Но инкрементирование это условие в синтаксисе awk и оно всегда true, значит после подставляется {print}, который печатает входящую строку. Второй случай по аналогии. За пример спасибо, но в отношении вопроса - это флуд.

awk ничего не выводит

awk bash

Узнать ответ

1 121
ответов 2

0

А что внутри start.sh происходит?

0

запуск java скрипта, который генерирует построчные данные