сортировать и uniq столбцы отдельно в текстовом файле

У меня есть файл, как показано ниже:

DFTE ARTE KAOE ETPJ 

Я хотел бы отсортировать каждый столбец и уникальные столбцы отдельно, как показано ниже:

 AAOE DFPJ ERT KT 

Интересно, есть ли кто-нибудь, кто знает, как использовать sort или uniq для этого?

  • Почему утилита uniq дает мне неожиданные результаты?
  • Уникальные линии, основанные на первом поле
  • Использование номеров в файле A для получения уникального идентификатора из файла B на основе порядка, указанного в файле A
  • Самый простой способ подсчета строк, соответствующих определенным шаблонам, включая «0», если строка не найдена?
  • Сохранение строк повторяется определенное количество раз
  • Комбинация uniq и agrep?
  • Самый быстрый инструмент `uniq` в linux
  • команды сортировки и uniq не работают, как ожидалось, когда выполняются cron
  • 2 Solutions collect form web for “сортировать и uniq столбцы отдельно в текстовом файле”

    Вы можете попробовать что-то вроде этого:

     paste -d'\t' <(cut -f 1 -d' ' file | sort -u) <(cut -f 2 -d' ' file | sort -u) <(cut -f 3 -d' ' file | sort -u) <(cut -f 4 -d' ' file | sort -u) >output 

    Я ставлю tab качестве разделителя paste чтобы быть более заметным на выходе.

    (Мне нравится ответ на пасту / cut @taliezin. Вот более прозаическое решение в случае многих столбцов). Разделите данные в один файл на один столбец, отсортируйте эти файлы и объедините файлы. Я предполагаю столбцы фиксированной ширины 1 символа, например, чтобы столбец 2 был короче столбца 3. В этом демо- data0 исходный файл:

     for i in {1..4} do awk -vi=$i '{ch = substr($0,i*2-1,1);if(ch!=" ")print ch}' </tmp/data0 | sort -u >/tmp/data$i done awk -v rows=$(wc -l </tmp/data0) ' BEGIN{ for(i=1;i<=4;i++) file[i] = "/tmp/data" i while(rows-->0){ for(i=1;i<=4;i++){ d = "" getline d <file[i] printf("%1s ",d) } printf "\n" } }' </dev/null в for i in {1..4} do awk -vi=$i '{ch = substr($0,i*2-1,1);if(ch!=" ")print ch}' </tmp/data0 | sort -u >/tmp/data$i done awk -v rows=$(wc -l </tmp/data0) ' BEGIN{ for(i=1;i<=4;i++) file[i] = "/tmp/data" i while(rows-->0){ for(i=1;i<=4;i++){ d = "" getline d <file[i] printf("%1s ",d) } printf "\n" } }' </dev/null 
    Interesting Posts

    В emacs существует ли способ Hex редактировать / просматривать буфер без потери информации об отмене?

    Как определить единственный дополнительный файл в двух других идентичных списках?

    найти | xargs shasum создает контрольную сумму самого файла контрольной суммы (преждевременно) и не работает при проверке

    Потерянные папки и файлы в каталоге / home / ubuntu / in Ubuntu

    Как создать виртуальную машину с живого сервера?

    Минимальные права доступа к файлу для переименования файла

    zmv для zsh: сухие пробеги и справочные страницы

    Странный персонаж в моей подсказке Bash?

    Невозможно выполнить операции записи и выполнения на разделе ntfs. Даже с привилегией root. Использование arch linux.

    Обработка переменных sed с помощью путей в них?

    Xvfb с 2 экранами и двумя серверами x11vnc (по одному для каждого экрана): только первая работает

    Плохая ошибка замещения в zsh shell

    Как я могу получить доступ на запись к моим USB-накопителям?

    Могут ли программы initramfs получить доступ ко всей памяти – они работают в реальном или защищенном режиме?

    Эмулировать отсоединение сетевого кабеля с помощью qemu-kvm

    Linux и Unix - лучшая ОС в мире.