Wie druckt man die Musteranzahl in jeder Zeile?

Wie druckt man die Musteranzahl in jeder Zeile?

Ich muss am Ende jeder Zeile die Anzahl der übereinstimmenden Zeichenfolgen ausdrucken.

Ein Beispiel für den Abgleich foo:

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

Ergebnis :

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

Ich habe diesen Link überprüft (Wie zählt man die Anzahl eines bestimmten Zeichens in jeder Zeile?), aber kein Glück.

Antwort1

Wir können awk mit gsub verwenden, um die Anzahl der Vorkommen zu erhalten.

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

Ausgabe:

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

Antwort2

Vielleicht mit einer Mischung aus bashundgrep

$ 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

Antwort3

Falls jemand auch etwas in Python möchte. Geben Sie den Dateinamen und das magische Wort an, über das gezählt werden soll.

#!/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]))

Verwendung:

$ 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

Antwort4

Unter Verwendung awkund Annahme, dass die Eingabe eine „einfache“ CSV-Datei ist (keine eingebetteten Kommas oder Zeilenumbrüche):

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

Dies nimmt die Zeichenfolge, deren Vorkommen wir zählen möchten, und durchläuft dann die Felder jedes Datensatzes, wobei genaue Übereinstimmungen gezählt werden. Die kumulierte Summe der übereinstimmenden Felder wird dann als neues Feld am Ende des Datensatzes hinzugefügt und der Datensatz wird gedruckt.

verwandte Informationen