Переупорядочить содержимое файла на основе двух столбцов

Как вы видите, что это происходит «параллельно»?

С 8-символьным паролем у вас есть (26 + 26 + 10 + 12 =) 74 ^ ​​8 возможных слов. Делает уникальные слова для 899.194.740.203.776. С 3-секундной задержкой (это 3 ;-)), которая составляет 85,539,834 года (899,194,740,203,776 * 3 / (365 * 24 * 60 * 60)). Предположим, вам понадобится половина попыток, так что это будет 42.769.917 лет. Даже с попытками 100000 (возможно, я знаю) параллельно он будет (в среднем) занимать примерно 427 лет.

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

По-прежнему считаете, что это возможно?

6
задан 31 October 2017 в 14:06

2 ответа

Я хотел бы использовать команду awk следующим образом:

awk '{arr[$1]=arr[$1]d[$1]$NF; d[$1]="-"} END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t infile)) column -t infile читает файл и здесь печатает только столбцы в левом выравнивании. sort -V сортирует файл как сортировку V. и awk, просто считывая поля в массив с именем arr с ключом как столбец # 1 и значением в качестве столбца №3, а затем в конце печатать элементы. Здесь я использовал замену процесса <(sort -V <(column -t infile)), в то время как мы могли бы использовать Pipes вместо этого, если ваша оболочка не поддерживает его, поскольку муро указывает /bin/dash.

Вывод:

ID Domaind 1 Y-X-Z 2 L-M-N 3 J 4 I-k

Или вы можете использовать, как показано ниже, вместо того, чтобы держать весь файл в массиве.

awk 'p!=$1 &&p{print l}{l=($1!=p)?$1FS$3:l"-"$3;p=$1}' <(sort -V <(column -t in))
3
ответ дан 18 July 2018 в 04:12

Я хотел бы использовать команду awk следующим образом:

awk '{arr[$1]=arr[$1]d[$1]$NF; d[$1]="-"} END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t infile)) column -t infile читает файл и здесь печатает только столбцы в левом выравнивании. sort -V сортирует файл как сортировку V. и awk, просто считывая поля в массив с именем arr с ключом как столбец # 1 и значением в качестве столбца №3, а затем в конце печатать элементы. Здесь я использовал замену процесса <(sort -V <(column -t infile)), в то время как мы могли бы использовать Pipes вместо этого, если ваша оболочка не поддерживает его, поскольку муро указывает /bin/dash.

Вывод:

ID Domaind 1 Y-X-Z 2 L-M-N 3 J 4 I-k

Или вы можете использовать, как показано ниже, вместо того, чтобы держать весь файл в массиве.

awk 'p!=$1 &&p{print l}{l=($1!=p)?$1FS$3:l"-"$3;p=$1}' <(sort -V <(column -t in))
3
ответ дан 24 July 2018 в 18:01
  • 1
    Зачем использовать замену процессов вместо простого трубопровода? [F1]? – muru 31 October 2017 в 14:02
  • 2
    У меня нет причин, кроме, потому что мне нравится этот синтаксис <( <() ) и не нравится Pipes: P – αғsнιη 31 October 2017 в 14:03
  • 3
    Кроме того, если вы отсортировали вход, вам не нужно сохранять элементы до END. Вы можете накапливать до $1 изменения: awk '$1 == prev {out=out"-"$3; next} out{print prev, out} {out=$3; prev=$1}' – muru 31 October 2017 в 14:04
  • 4
    Если у вас нет причин, то вы должны предупредить, что замена процесса может быть недоступна во всех оболочках в Ubuntu. /bin/dash не имеет этого. – muru 31 October 2017 в 14:05
  • 5
    @ pa4080 Фактически первый X исчезает с тех пор, как я получаю $NF, для этого используйте awk '{one=$1;$1=$2="";arr[one]=arr[one]d[one]$0; d[one]="-"} END{for (x in arr) print x"\t"arr[x]}' <(sort -V <(column -t in)) или удаляя пробелы, awk '{one=$1;$1=$2="";gsub(/[ \t]+/,"",$0);arr[one]=arr[one]d[one]$0; d[one]="-"} END{for (x in arr) print x"\t"arr[x]} ' <(sort -V <(column -t in)) – αғsнιη 1 November 2017 в 15:19

Другие вопросы по тегам:

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