Уникальные строки с уникальными словами

Можно попробовать следующее, для подтверждения после удаления каждого файла сначала:

$ find /path/to/dir -type f -name "*.txt" -empty -ok rm {} \;

или если Вы чувствуете себя больше уверенно:

$ find /path/to/dir -type f -name "*.txt" -empty -exec rm {} \;
1
05.11.2012, 13:04
2 ответа

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

tr -cs 'A-Z' '[\n*]' < words.txt |
  sort |
  uniq -u |
  perl -lne '
    if ($ARGV eq "-") {
      $u{$_}=1;
      next
    }
    for $w (/[A-Z]+/g) {
      next LINE unless $u{$w}
    }
    print' - words.txt

Изменение A-Z к списку символов, которые составляют слово.

1
27.01.2020, 23:39

Вы могли сделать это как это с awk:

unique.awk

FNR == NR {
  for(i=1; i<=NF; i++)
    if(++w[$i] > 1)
      not_unique[$i] = 1
  next
}

{
  for(i=1; i<=NF; i++)
    if(not_unique[$i])
      next
}

1

Выполните его как это:

awk -f unique.awk infile infile

Вывод:

F G

Как острота:

awk 'FNR == NR { for(i=1; i<=NF; i++) if(++w[$i] > 1) not_unique[$i] = 1; next } { for(i=1; i<=NF; i++) if(not_unique[$i]) next } 1' infile infile

Объяснение

Файл должен быть проанализирован дважды, сначала чтобы найти все групповые слова, затем распечатать те строки, которые содержат только уникальные слова. Это отражается в структуре программы, первый блок создает хеш, содержащий слова, которые не уникальны, вторые проверки каждая строка, и пропускает его, если это имеет групповые слова. Запаздывание 1 в конце только достигнут, когда уникальные строки происходят, и он вызывает действие awk по умолчанию ({ print $0 }).

1
27.01.2020, 23:39

Теги

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