Вы можете использовать
/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
)
Вы можете использовать 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}'
С Перлом:
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 ), если они были до запуска этого.
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 при каждом последующем дублировании.
Попытка с помощью описанного ниже метода
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