suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Gruppieren Sie Suchergebnisse in Gruppen und speichern Sie sie als Array von Objekten

In PHP verwende ich grep, um alle Anwendungsfälle für bestimmte Klassen in fast allen Dateien zu suchen und zu zählen.

\exec("grep -orE '" . $classesBarred . "' ../../front/src/components | sort | uniq -c", $allClassesCount);

Stringartig von $classesBarred包含类似于search-unfocused|bg-app|enlarged-window(aber mehr).

Das aktuelle Ergebnis ist

'      2 ../../front/src/components/Actions/ActionOwner.vue:show', 
'      1 ../../front/src/components/Actions/ActionOwner.vue:action', 
'      1 ../../front/src/components/Actions/ActionOwner.vue:show', 
'      5 ../../front/src/components/Actions/ActionOwner.vue:action', 
'      1 ../../front/src/components/Actions/ActionOwner.vue:show',
....(还有几百行类似的结果)

Ich muss die Ergebnisse in einem Array speichern, etwa so:

[
  {show: 38}, {action: 123}, {search-unfocused: 90}, {....}
]

Herausgeber: @Freeman bietet hier eine Lösung mit awk

grep -orE "btn-gray|btn-outline-white" ../../front/src/components | awk -F: '{打印 }' | awk -F/ '{print $NF}' |排序| uniq-c| awk '{print "::" }'

Habe folgende Ergebnisse erhalten:

btn-gray::1
btn-outline-white::13

P粉198814372P粉198814372445 Tage vor548

Antworte allen(1)Ich werde antworten

  • P粉277824378

    P粉2778243782023-09-11 20:46:24

    是的,我可以看到,你的代码使用 awkgrep 的输出重新排列为两列,一列是类名,另一列是计数, 输出结果如下:

    search-unfocused 90
    bg-app 5
    enlarged-window 12

    现在你可以通过 PHP 将这个输出解析为一个数组,代码如下:

    $results = array();
    foreach ($allClassesCount as $line) {
      $parts = explode(" ", $line);
      $className = $parts[0];
      $count = (int)$parts[1];
      if (!isset($results[$className])) {
        $results[$className] = $count;
      } else {
        $results[$className] += $count;
      }
    }

    数组的结果如下:

    [
      "search-unfocused" => 90,
      "bg-app" => 5,
      "enlarged-window" => 12,
      ...
    ]

    更新:
    如果你坚持使用 awk 和 sed,你可以这样做:

    grep -orE "$classesBarred" ../../front/src/components | awk -F '/' '{print $NF}' | awk -F ':' '{print $2}' | sort | uniq -c | awk '{gsub(/^[ \t]+|[ \t]+$/, "", $2); print "{\""$2"\": "$1"},"}' | paste -sd '' | sed 's/,$//' | awk '{print "["$0"]"}'

    结果如下:

    [
      {"show": 38},
      {"action": 123},
      {"search-unfocused": 90},
      {....}
    ]

    祝你好运!

    Antwort
    0
  • StornierenAntwort