Как может я числа групп в файле

$ ps -eLf
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root         1     0     1  0    1 19:25 ?        00:00:00 init [4]
...    
root      1699     1  1699  0    1 19:25 ?        00:00:00 /usr/bin/kdm
root      1701  1699  1701  8    2 19:25 tty10    00:13:10 /usr/bin/X :1 vt10 ...
root      1701  1699  1703  0    2 19:25 tty10    00:00:00 /usr/bin/X :1 vt10 ...
root      1706  1699  1706  0    1 19:25 ?        00:00:00 -:1
root      1707  1699  1707  0    2 19:25 tty9     00:00:02 /usr/bin/X :0 vt9 ...
root      1707  1699  1710  0    2 19:25 tty9     00:00:00 /usr/bin/X :0 vt9 ...
root      1713  1699  1713  0    1 19:25 ?        00:00:00 -:0
....

отвечает на Ваш вопрос, я думаю.

Тем не менее, вопрос, кажется, смешивает несколько вещей - многопоточность не о не использовании fork()/exec(). Потоки совместно используют то же адресное пространство и если Вы хотите выполнить другой процесс, Вы, конечно, не хотите, чтобы оно имело доступ к тому же адресному пространству. И если Вы решили не использовать внешние программы (особенно в оболочке, что, так как Вы упоминаете это), необходимо было бы кодировать всю функциональность снова.

Многопоточность не является средством исправления для всего. Это может главным образом быть средство исправления только для хорошо parallelizable проблем на самом деле - проверяют страницу Wiki на хороший краткий обзор. Создание многопоточной программы не делает его лучше, в большинстве случаев это делает это хуже из-за ошибок в коде синхронизации (если существующий вообще).

4
03.05.2014, 02:25
9 ответов
[113365] С помощью [113820]awk[113821] ([113822]mawk[113823]):
  • [113824]-F[113825] устанавливает разделитель полей ([113826]FS[113827]) на [113828]. [113829], кроме этого мы проходим через все строки с [113830]{COUNTS[$1]++}[113831], используя [113832]$1[113833] в качестве части перед десятичным разделителем ([113834]. [113835]) и сохраняя запись о том, сколько раз мы сталкиваемся с ними в массиве с именем [113836]COUNTS[113837].
  • В конце ([113838]END {}[113839]) мы затем сбрасываем то, что нашли. Как видите, самая большая часть - это вывод.
  • Немного более читабельный в файле:

    8
    27.01.2020, 20:44
    [113357] Вы можете использовать [113809]awk[113810]:

    Если вы хотите, чтобы выход был отсортирован, то передайте выход в [113811] сортировку [113812]:

    Для вашего входа образца это даст:

    7
    27.01.2020, 20:44
    [113373]В [113840]perl[113841]:

    Правка

    Наверное, более эффективный:

    4
    27.01.2020, 20:44
    [114352] Кажется, что ваш файл отсортирован, поэтому вы можете сделать так: Если он не отсортирован:
    1
    27.01.2020, 20:44

    cut -b-2[115489] выбирает два первых символа, [115490] сортирует -nr[115491] сортирует результаты по самой высокой частоте сначала

    Результирующий вывод:

    Или как питоновый oneliner, просто для черта:

    Результирующий вывод:

    1
    27.01.2020, 20:44
    [115017]GNU coreutils + grep approach:

    Флаг [115492]-o[115493] указывает [115494]grep[115495] на вывод только соответствующей части строки, а [115496]-P[115497] активирует Perl Compatible Regular Expressions, что позволяет использовать [115498]\d[115499] для чисел. Таким образом, [115500]grep[115501] выведет самый длинный отрезок, найденный в начале строки (т.е. все до первой нецифровой цифры, [115502].[115503]), а затем [115504]сортирует [115505], и [115506]uniq -c[115507] подсчитывает количество случайностей каждой строки на входе.

    Другой Perl-подход:

    [115508]$&[115509] - это строка, соответствующая предыдущей операции сравнения, поэтому мы сохраняем ее в хэш ([115510]%k[115511]) и увеличиваем ее значение на единицу. Блок [115512]END[115513] выведет каждое найденное число ([115514]$_[115515]) и значение, которое он имеет в хэше ([115516]$k{$_}[115517]), количество раз, когда он был найден.

    А баш (>=версия 4) ассоциативных массивов приближается:

    Interval Since Last Panic Report:  472 sec
    Panics Since Last Report:          2
    Anonymous UUID:                    D89B5624-FF95-48B5-8F55-0987EA2D2466
    
    Sun Jun 26 18:02:46 2011
    panic(cpu 0 caller 0x6e085e4a): "ntfs_map_runlist_nolock(): Called for $MFT/$DATA!\n"@/SourceCache/ntfs/ntfs-65.5/kext/ntfs_attr.c:245
    Backtrace (CPU 0), Frame : Return Address (4 potential args on stack)
     ...
      Kernel Extensions in backtrace (with dependencies):
         com.apple.filesystems.ntfs(3.4)@0x6e05a000->0x6e0b9fff
    
    BSD process name corresponding to current thread: mount_ntfs
    

    IFS[115519] установлено на [115520].[115521] означает, что входные строки разбиваются на записи по [115522].[115523] так что [115524]$a[115525] будут первыми цифрами вплоть до [115526].[115527]. Проходим через них и используем в качестве ключей к ассоциативному массиву, значение которого увеличивается каждый раз при поиске числа. Затем, после заполнения массива, пропустим по его списку ключей ([115528]${!ll[@]}[115529]) и выведем каждый ключ и его значение (количество раз, когда он был замечен).[115028].

    0
    27.01.2020, 20:44

    С Миллером :

    $> mlr --from data.txt --ocsv put '$1=int(ceil($1))' then count-distinct -f 1
    1,count
    31,3
    30,1
    27,1
    26,4
    25,3
    
    0
    27.01.2020, 20:44

    Используя GNU datamash's bin option:

    datamash -s  bin:1 1 < num | datamash -s -g 1 count 1
    

    Output:

    24  3
    25  4
    26  1
    29  1
    30  3
    
    0
    27.01.2020, 20:44

    Теги

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