Как распечатать счетчик деталей на каждой линии?

Насколько я понимаю, вы хотите перечислить файлы, содержащие оба "ключевое слово1" и "ключевое слово2".Для этого вы можете использовать два теста -exec следующим образом:

find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -iH keyword2 {} \;

Это запустит второй grep условно - если первый вернул истину. Параметр -q предотвращает вывод из первого grep , так как он перечислит все файлы, содержащие только «ключевое слово1».

Поскольку опция -H выводит соответствующую строку вместе с именем файла, вы, вероятно, захотите использовать вместо этого -l . Итак,

find . -name "*.xml" -exec grep -iq keyword1 {} \; -exec grep -il keyword2 {} \;

Это даст результат, аналогичный тому, что предложил Калеб, но без необходимости в дополнительном -print .

4
26.08.2018, 00:32
3 ответа

Мы можем использовать awk с gsub, чтобы получить количество вхождений.

 awk '{print $0","gsub(/foo/,"")}' file

Выход:

foo,bar,foo,foo,3
bar,foo,bar,bar,1
foo,foo,bar,bar,2
10
27.01.2020, 20:47

На случай, если кому-то тоже понадобится что-то на Python. Укажите имя файла и волшебное слово для подсчета.

#!/usr/bin/python3
# magic_word_count.py
# Takes a filename and magic word and prints the number of times the word
# appears on each line of the file.
#
#./magic_word_count.py myfile.txt foo
#
import sys 
filename = sys.argv[1]
magic_word = sys.argv[2]

with open(filename, 'r') as f:
    for line in f.readlines():
        words = line.strip().split(',')
        print(len([word for word in words if word == magic_word]))

Использование:

$ cat myfile.txt 
foo,bar,foo,foo
bar,foo,bar,bar
foo,foo,bar,bar

$./magic_word_count.py myfile.txt foo
3
1
2
0
27.01.2020, 20:47

Возможно со смесью bashиgrep

$ while read -r line; do 
    echo -n "$line -> " 
    grep -o foo <<<"$line" | wc -l 
  done < /path/to/my-input-file

foo,bar,foo,foo -> 3
bar,foo,bar,bar -> 1
foo,foo,bar,bar -> 2
1
27.01.2020, 20:47

Теги

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