행당 패턴 수를 인쇄하는 방법은 무엇입니까?

행당 패턴 수를 인쇄하는 방법은 무엇입니까?

각 줄의 끝에서 일치하는 문자열의 개수를 인쇄해야 합니다.

일치 예 foo:

foo,bar,foo,foo
bar,foo,bar,bar
foo,foo,bar,bar

결과:

foo,bar,foo,foo,3
bar,foo,bar,bar,1
foo,foo,bar,bar,2

이 링크를 확인했습니다(각 줄의 특정 문자 수를 계산하는 방법은 무엇입니까?) 그러나 운이 좋지는 않습니다.

답변1

awk와 gsub를 사용하여 발생 횟수를 얻을 수 있습니다.

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

산출:

foo,bar,foo,foo,3
bar,foo,bar,bar,1
foo,foo,bar,bar,2

답변2

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

답변3

누구든지 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

답변4

awk입력이 "간단한" CSV(포함된 쉼표나 줄 바꿈 없음)라고 가정하고 사용 하세요.

awk -v string="foo" -F, '
    BEGIN { OFS = FS }
    {
        sum = 0
        for (i = 1; i <= NF; ++i) sum += $i == string
        $(NF+1) = sum
    }; 1' file

이는 발생 횟수를 계산하려는 문자열을 가져온 다음 각 레코드의 필드를 반복하여 정확한 일치 횟수를 계산합니다. 그런 다음 일치하는 필드의 누적 합계가 레코드 끝에 새 필드로 추가되고 레코드가 인쇄됩니다.

관련 정보