Найти файлы и каталоги, доступные для записи [дубликат]

Сортировка и соединение (но нет awk ) метод:

sort -k2    main.txt >    main_sort.txt ; \
sort -k1 changes.txt > changes_sort.txt ; \
{ join      -i  -1 2 -2 1  -o 1.1 2.2  main_sort.txt changes_sort.txt ; \
  join -v 1 -i  -1 2 -2 1  -o 1.1 1.2  main_sort.txt changes_sort.txt ; } | \
  sort -g | column -t

Вывод:

word_1  root_A
word_2  root_A
word_3  genre_B
word_4  root_C
word_5  root_A

Объяснение ...

join требует двух файлов с отсортированными полями. Поскольку каждый файл имеет большой размер и его нужно использовать дважды, более эффективно отсортировать оба файла заранее. Предположим, что все файлы разделены табуляцией .

Сортировка main.txt по 2-му полю (жанру) и изменениям.txt в поле 1-е (корневое):

sort -k2    main.txt >    main_sort.txt
sort -k1 changes.txt > changes_sort.txt

Пройдите 1, выведите строки с совпадениями:

join -i -1 2 -2 1 -o 1.1 2.2 main_sort.txt changes_sort.txt

Который выводит 4 строки, отсортированные по полю корня :

word_1 root_A
word_2 root_A
word_5 root_A
word_4 root_C

Флаги соединения "- 1 2 -2 1" сообщают ему присоединить к 1-му файлу секунда к полю 2-го файла первого поля. Флаги "- o 1.1 2.2" сообщают ему напечатать первое первое поле 1-го файла в 2-е второе поле файла.

Шаг 2, используйте флаг "- v 1" для вывода недостающей строки из первого файла:

join -v 1 -i -1 2 -2 1  -o 1.1 1.2  main_sort.txt changes_sort.txt

Вывод:

word_3 genre_B

После чего выводятся оба объединяются, а затем сортируются (см. начало ответа).

13
09.04.2018, 19:11
0 ответов

Теги

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