подсчитывать значения в столбце, но рассматривать только строки после совпадения первого вхождения совпадающего шаблона

for file in *.csv
do
  filename=${file%.csv}
  sed -i -e "1s/\$/,filename/; 2,\$s/\$/,$filename/" "$file"
done
  1. Перебрать каждый *csvфайл в текущем каталоге,
  2. подготовьте текст имени файла, удалив завершающий элемент.csv
  3. отредактируйте файл с помощью sed, -iв месте -, с помощью :
    1. только в строке 1, найдите и замените конец строки (, экранированный $), текстом ,filename.
    2. в строках со 2 по конец файла ($), найдите и замените конец строки($)запятой и подготовленным именем файла
0
21.01.2019, 14:09
3 ответа

Попробуйте это,

 sed -e '1,/sup/d;/^[0-9]/,$d' file.txt | awk 'NF>=3{ a[$2]++ } END { for (n in a) print n, a[n] }'
  • 1,/sup/dудалит все доsup
  • /^[0-9]/,$dудалит, если какой-либо процесс отстает отsup
1
28.01.2020, 02:41

Очень похоже на @msp9011

$ sed -n '/sup/,$p' input.txt|awk 'NR>1 {counts[$2]++} END  { for(key in counts) print key, counts[key] }'

sedпечатает все строки, начиная с первой строки, содержащей sup, до конца файла. awkподсчитывает из переданной ему второй строки все разные значения во втором столбце. В конце распечатывает результат.

РЕДАКТИРОВАТЬ :Как упоминалось в @msp9011, это предполагает, что после него больше нет процессов. Чтобы найти этот процесс где-то между, вот обновленная версия:

$ sed -n '/sup$/,/^[0-9]/p' count.txt|sed -e '1d' -e '$d'|awk '{counts[$2]++} END  { for(key in counts) print key, counts[key] }'

sedпечатает все, начиная со строки, которая заканчивается на sup, до строки, начинающейся с цифры. Затем первая и последняя строки удаляются, и awkначинает отсчет.

EDIT2 :@msp9011 уже обновил свой ответ:)

0
28.01.2020, 02:41

Вы можете установить «переключатель обработки» при первом совпадении записи supи считать, только если переключатель установлен:

$ gawk '
    /sup/ {p=1} 
    p {a[$2]++} 
    END {
      PROCINFO["sorted_in"] = "@ind_str_asc"; 
      for (i in a) print i, a[i]
    }' file
abc 2
cur 1
sup 3
zz0 1
zzz 1

Если ваш Awk не поддерживает PROCINFOфункцию обхода массива, вы можете направить вывод через внешнийsort

0
28.01.2020, 02:41

Теги

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