Получить количество повторений, скомпилированное с количеством вхождений числа

Вы можете использовать

/usr/bin/grep -rlZ 'Not Found' | xargs -0 -r rm --

где --запрещает утилите интерпретировать что-либо впоследствии как вариант, или,

/usr/bin/grep -rlZ 'Not Found'. | xargs -0 -r rm

, что приведет к тому, что grepбудет префикс ./к именам путей всех файлов. Параметр -rдля xargsзаставляетxargsне запускать команду, если она не получает входных данных от grep(, т. е. если ни один файл не содержит строку ).

Лично я, вероятно, использовал бы find, хотя:

find. -type f -exec grep -qF 'Not found' {} ';' -delete

(который, я думаю, делает то же самое :рекурсивно удаляет файлы, содержащие строкуNot found)

2
27.07.2020, 11:29
4 ответа

Вы можете использовать awkдля подсчета чисел:

sort file | uniq -dc | awk '{n+=$1}END{print n}'

Выход:

5

(вам не нужно catздесь, так как sortпринимает ввод)

Если ваш uniqне поддерживает -dc, то

sort file | uniq -c | awk '$1>1{n+=$1}END{print n}'
5
18.03.2021, 23:17

С Перлом:

perl -lne '
  $k += qw(2 1 0)[++$h{$_}<=>2];
  END { print $k; }
' file
5

Мы можем вычислить число dups, поддерживая хэш-счетчик с ключом в строке ввода.

Текущий счетчик $k увеличивается на 2, 1 и 0, если ключ был замечен дважды, более двух раз или в самый первый раз.

Обратите внимание на трехзначный -оператор космического корабля <=>, который при сравнении возвращает -1,0,+1. См. perldoc perlopдля получения более подробной информации.

Обратите внимание, :удаляйте пробелы (s ), если они были до запуска этого.

3
18.03.2021, 23:17
awk 'seen[$0]++ {count += (seen[$0]==2 ? 2:1)} END {print count+0}' file

Если строка уже встречалась ранее, увеличьте countна 2 или 1 (в зависимости от того, является ли эта строка первым дубликатом ). В конце выведите count(+0, чтобы awk печатал 0 вместо пустой строки в случае, если countникогда не увеличивалось ).

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

awk '{count += seen[$0]; seen[$0] = (seen[$0]?1:2)} END {print count}' file

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

8
18.03.2021, 23:17

Попытка с помощью описанного ниже метода

awk '{a[$1]++}END{for(x in a){print x,a[x]}}' ppp| awk '$2 >1{sum=sum+$2}END{print sum}'

выход

awk '{a[$1]++}END{for(x in a){print x,a[x]}}' ppp| awk '$2 >1{sum=sum+$2}END{print sum}'
5

Добавление метода Python

#!/usr/bin/python
m=open('ppp','r')
j=[]
f=[]
for i in m:
    if i.strip() not in j:
        j.append(i.strip())

e=open('ppp','r')
for i in e:
    f.append(i.strip())

r=0
for w in j:
    if f.count(w) >1:
        r=r+f.count(w)

print r


output
5
0
18.03.2021, 23:17

Теги

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