Rumah  >  Soal Jawab  >  teks badan

Kumpulan hasil carian ke dalam kumpulan dan simpan sebagai tatasusunan objek

Dalam PHP saya menggunakan grep untuk mencari dan mengira semua kes penggunaan untuk kelas tertentu dalam hampir semua fail.

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

Seperti rentetan $classesBarred包含类似于search-unfocused|bg-app|enlarged-window(tetapi lebih banyak lagi).

Hasil semasa ialah

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

Saya perlu menyimpan hasil dalam tatasusunan, seperti:

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

Editor: @Freeman menyediakan penyelesaian di sini, menggunakan awk

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

Mendapat keputusan berikut:

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

P粉198814372P粉198814372375 hari yang lalu482

membalas semua(1)saya akan balas

  • P粉277824378

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

    Ya, saya dapat melihat bahawa output kod anda menggunakan awkgrep disusun semula kepada dua lajur, satu ialah nama kelas dan satu lagi ialah kiraan, Outputnya adalah seperti berikut:

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

    Kini anda boleh menghuraikan output ini ke dalam tatasusunan melalui PHP, kodnya adalah seperti berikut:

    $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;
      }
    }

    Hasil tatasusunan adalah seperti berikut:

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

    Kemas kini:
    Jika anda berkeras untuk menggunakan awk dan sed, anda boleh melakukan ini:

    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},
      {....}
    ]
    "]"}'

    Hasilnya adalah seperti berikut:

    rrreee

    Semoga berjaya kepada anda!

    balas
    0
  • Batalbalas