搜尋

首頁  >  問答  >  主體

將搜尋結果按群組分組並儲存為物件數組

在PHP中,我使用grep在幾乎所有檔案中搜尋和計算某些類別的所有用例。

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

其中$classesBarred包含類似search-unfocused|bg-app|enlarged-window(但更多)的類別字串。

當前結果為

'      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',
....(还有几百行类似的结果)

我需要將結果保存在一個陣列中,類似於:

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

編輯: @Freeman在這裡提供了一個解決方案,使用awk

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

#得到了以下結果:

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

P粉198814372P粉198814372430 天前535

全部回覆(1)我來回復

  • 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 }' | sort | uniq -c | awk '{gsub(/^[ \t]+|[ \t]+$/, "", ); print "{\"""\": ""},"}' | paste -sd '' | sed 's/,$//' | awk '{print "["
    [
      {"show": 38},
      {"action": 123},
      {"search-unfocused": 90},
      {....}
    ]
    "]"}'

    結果如下:

    rrreee

    祝你好運!

    回覆
    0
  • 取消回覆