各行の最後に一致する文字列の数を印刷する必要があります。
一致の例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
これは、発生回数を計算する文字列を取得し、各レコードのフィールドを繰り返して正確な一致回数を計算します。次に、一致するフィールドの累積合計がレコードの最後に新しいフィールドとして追加され、レコードが印刷されます。