Соберите 2 слова из определенного столбца CSV и подсчитайте их

На некоторые вопросы/предложения, оставленные другим ответом, можно ответить, прочитав документацию ниже.

Я не думаю, что discardрекомендуется для файловых систем. Вместо этого рекомендуется периодически запускать fstrim. Вы можете найти работу cron для этого.

Разработчики ядра даже в последнее время недовольны производительностью операций отбрасывания. Он слишком сильно различается между устройствами. И вы все равно должны выполнять периодические сбросы , потому что устройствам разрешено сбрасывать операции сброса, если они слишком заняты.

Как говорится в другом ответе, ваша файловая система намного больше вашего пространства подкачки, поэтому, если вы не можете доказать обратное, лучше не добавлять опцию discard. И discard=onceумно, но все еще может замедлить загрузку (, если было использовано пространство подкачки ). Поэтому я не вижу смысла включать его.

man swapon

-d, --discard[=policy]

Enable swap discards, if the swap backing device supports the discard or trim operation. This may improve performance on some Solid State Devices, but often it does not. The option allows one to select between two available swap discard policies: --discard=once to perform a single-time discard operation for the whole swap area at swapon; or --discard=pages to asynchronously discard freed swap pages before they are available for reuse. If no policy is selected, the default behavior is to enable both discard types. The /etc/fstab mount options discard, discard=once, or discard=pages may also be used to enable discard flags.

2
25.08.2021, 11:36
1 ответ

Предположим, что если одна из строк, которые вы ищете, не появляется во входных данных, вы хотите, чтобы они были напечатаны со счетом 0, а не не напечатаны вообще, надежный, переносимый, эффективный, лаконичный способ сделать это просто:

$ awk -F',' -v tgts='Want,Need' '
    { cnt[$8]++ }
    END { split(tgts,t); for (i in t) print t[i], cnt[t[i]]+0 }
' file
Want 1
Need 1

так что трудно понять, где здесь может быть задействовано регулярное выражение. Возможно следующее:

$ awk -F',' -v tgts='Want|Need' '
    $8 ~ ("^"tgts"$") { cnt[$8]++ }
    END { split(tgts,t,/[|]/); for (i in t) print t[i], cnt[t[i]]+0 }
' file
Want 1
Need 1

или:

$ awk -F',' -v tgts='Want|Need' '
    $0 ~ ("([^,]*,){7}"tgts"(,|$)") { cnt[$8]++ }
    END { split(tgts,t,/[|]/); for (i in t) print t[i], cnt[t[i]]+0 }
' file
Want 1
Need 1

но регулярные выражения просто усложняют сценарии и делают их более хрупкими (сценарии с регулярными выражениями потерпят неудачу, если строки, которые вы хотите найти, содержат метасимволы регулярных выражений, такие как .или *, в то время как первый сценарий будет продолжать работайте )и не добавляйте значения, если у вас нет миллиардов уникальных $8значений во входных данных.

0
26.08.2021, 21:15

Теги

Похожие вопросы