Удалить вложенные -каталоги на основе соответствующей информации из столбца

Я бы использовал Python. В настоящее время на каждом linux ststem установлен python2.

Добавьте каждый IP-адрес в ассоциативный массив dict ()в виде пар ключ=значение, т. е. {"12.34.56.78" :1, "87.76.43.21" :3}.

Вы «проверяете» IP-адрес как ключ и увеличиваете значение на 1. Если вы используете defaultdict («ip» ), если ключ не существует, он создается со значением по умолчанию 0. Если ключ уже существует, defaultdict ничего не делает. Значение увеличивается на следующей строке.

#!/usr/bin/python2

infile = open("file.txt","r")
iplist = {}  # create an empty dict

for line in infile:
    line = line.strip()   # remove newline.
    if line: # if not a blank line.
        iplist.setdefault(line, 0) # check for ip and add with default value of 0
        iplist[line] += 1 # increment

outfile = open("out.txt","w") #open output file

for key in iplist.keys():
    line = "%-15s = %s" % (key, iplist[key])
    print line   # print uf desired.
    outfile.write(line + "\n")

исходящий файл:

cat out.txt                                                          
27.33.65.2      = 2
58.161.137.7    = 1
121.50.198.5    = 1
184.173.187.1   = 3

Я знаю, что вы искали решение с командной строкой, но, как видите, это элегантно отформатированное отображение, занимающее всего около дюжины строк. Python — отличный инструмент для администрирования.

1
21.10.2021, 20:10
1 ответ

Конечно, мы можем предоставить вам решение. Но где веселье?

Позвольте мне сказать, что ваши требования кажутся мне опасными, так как каждая папка, не входящая в csv, будет удалена (представьте себе опечатку, неправильный формат файла/окончание строки или конечные пробелы)

Тем не менее, я познакомлю вас с тремя друзьями обработки текстовых файлов в сценарии оболочки ()

  • работа со строками (переменных)
  • grepядро ​​текстового поиска -утилита (содержимое файла, только чтение)
  • findядро ​​поиска файлов -утилита (имя файла)

Никогда не используйте код, который вы не полностью понимаете!

#!/bin/sh

csvfile='index.txt'
csvseparator=','

cut -d ',' -f6,26 file.csv > index.txt

for subdir in./*/*/
  do
    subdir=${subdir%/}
    dir=${subdir%/*}
    parent=${dir%/*}
    subdir=${subdir##*/}
    dir=${dir##*/}
    if grep -Fxq "${dir%_*}$csvseparator$subdir" "$csvfile"
      then
        echo "ok: $parent/$dir/$subdir"
      elif grep -wq "^${dir%_*}" "$csvfile"
        then
          echo "no: $parent/$dir/$subdir"
#          find "$parent/$dir/$subdir" -delete
    fi
done
1
22.10.2021, 15:09

Теги

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