У меня есть два файла с именами. Когда я запускаю cat file1 file2 | sort
, терминал показывает имена, отсортированные в алфавитном порядке, но когда я запускаю, cat file1 file2 > file3 | sort
я не вижу отсортированного вывода. Почему?
решение1
Вы уже перенаправили вывод file1
и file2
в новый файл file3
.
С помощью этой команды cat file1 file2 > file3 | sort
, sort
после символа трубы.
Это можно проверить следующим образом.
cat file1
A
Z
B
cat file2
F
G
C
Теперь, когда я запускаю команду as, cat file1 file2 > file3 | sort
мы видим, что содержимое file1
и file2
записывается, file3
но не сортируется.
Я считаю, что то, чего вы пытаетесь добиться, можно было бы довольно легко осуществить, если бы:
cat file1 file2 | sort > file3
Однако вывод в окне консоли не отображается.
Если вам необходимо, чтобы вывод двух файлов после сортировки был записан в новый файл и в то же время отсортированный вывод был доступен в консоли, вы можете сделать что-то вроде следующего.
cat file1 file2 | sort > file3; cat file3
tee
Однако в данном случае его полезно использовать . tee
можно эффективно использовать как,
cat file1 file2 | sort | tee file3
Приведенная выше команда по сути объединяет два файла, сортирует их и отображает вывод в консоли, одновременно записывая вывод канала в новый файл, указанный с помощью команды tee
.
Как пользователькейсиотмечает, что если zsh
в вашей системе доступна оболочка, вы также можете использовать следующую команду.
sort <file1 <file2 | tee file3
решение2
POSIX определяет sort
назначение утилиты следующим образом:
Сортировать строки всех указанных файлов вместе и записать результат в указанный вывод.
Вы можете отсортировать два файла в объединенный выходной файл следующим образом:
sort $opts file1 file2 >output_file
Если вы хотите увидеть вывод на вашей оболочкеstdout
исохраните результаты в выходном файле, а затем используйте tee
:
sort $opts file[12] | tee output_file