Как считать количество слов и распечатать строки, которые соответствуют точно данному шаблону?

Можно ли записать маленькую программу C? kill(2) системный вызов действительно возвращается-1, если Ваш UID не имеет разрешения отправить сигнал в данный процесс, но errno установлен на EPERM в этом случае, в противоположность ESRCH для несуществующего PID. Я довольно уверен, что Вы могли сделать это портативным через Солярис, HP-UX, Linux и *BSDs. Необходимо было бы скомпилировать его для каждой платформы.

2
25.07.2013, 17:23
3 ответа

Можно использовать grep получить строки и grep -c получить количество строк. Если Вам не нравится работать grep два раза можно использовать tee и замена процесса (следующее является синтаксисом удара):

grep abc-ERROR: input.txt | tee >( wc -l )
2
27.01.2020, 22:14
  • 1
    Нет не рабочие средства, не дающие любой вывод –  Bhushan J 17.04.2013, 13:02
  • 2
    @Bhushan: Работы для меня. Какую оболочку Вы выполняете? –  choroba 17.04.2013, 13:51
  • 3
    grep-w "C:\Documents and Settings\bj3\comp_appli.txt" Является этим правильный синтаксис..? потому что не работа рядом.. Я выполняю его через простой файл оболочки (ksh) –  Bhushan J 17.04.2013, 14:11
  • 4
    Извините я попробовал неправильно один не Ваш... Большое спасибо –  Bhushan J 17.04.2013, 14:13
  • 5
    я получаю эту ошибку: синтаксическая ошибка: добрался (ожидая Word так, можете Вы говорить мне правильный синтаксис –  Bhushan J 17.04.2013, 14:15

Как это:

$ cat file
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# abc-ERROR: xyxxkkfgfr
# def-Error: aaaaaa
# abc-ERROR.cp
# abc-ERROR: asdgsdgaaf
# abc-ERROR: asdgsdgaaf
# abc-ERROR: tttttttttq

$ awk '/abc-ERROR: /{a[$0]++}END{for(k in a) printf "%d\t(count)\n%s\t(line)\n",a[k],k}' file
1   (count)
# abc-ERROR: tttttttttq (line)
2   (count)
# abc-ERROR: asdgsdgaaf (line)
3   (count)
# abc-ERROR: xyxxkkfgfr (line)
0
27.01.2020, 22:14

Я рекомендую сделать это двумя способами.

1) Поместите функцию в свой bashrc / bash_profile и создайте псевдоним для вызова этой функции (это сделает глобальное использование этого)

2) Создайте файл сценария оболочки и также можете создать псевдоним этого файла .

#!/bin/bash
function matchString(){
REGEX="$1"
FILE="$2"
RESULTS=$(grep -n "$REGEX" $FILE | awk -F ":" '{print $2 "\tLine: " $1}')
COUNT=$(echo $RESULTS | wc -l)
echo "Count: $COUNT"
echo $RESULTS
}
matchString $1 $2

Вызов этого файла (например, bash matchString.sh "abc-ERROR:" test.txt) на основе вашего текстового файла будет иметь следующий вид:

Count: 1

abc-ERROR Line: 1

- Эта функция принимает 1-й аргумент в качестве шаблона регулярного выражения (так что его можно повторно использовать в любом аналогичном сценарии) и ищет этот шаблон в файле, который вызывается вторым аргументом.

1-я строка вывода - это общее количество всех совпавших строк, а каждая следующая строка - это совпадение, за которым следует табуляция - номер строки этого совпадения.

0
27.01.2020, 22:14

Теги

Похожие вопросы