我有兩個文件,其中包含一些名稱,當我運行時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
現在,當我運行命令時,我們可以看到和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
上面的命令基本上連接了 2 個檔案並對它們進行排序並在控制台中顯示輸出,同時將管道的輸出寫入使用命令指定的新檔案tee
。
作為用戶凱西指出,如果您zsh
的系統上有可用的 shell,您也可以使用以下命令。
sort <file1 <file2 | tee file3
答案2
POSIX 定義了該sort
實用程式的用途:
對所有指定檔案的行進行排序並將結果寫入指定的輸出。
您可以將兩個文件排序為一個串聯的輸出文件,例如:
sort $opts file1 file2 >output_file
如果你想在你的 shell 上看到輸出stdout
和將結果保存在輸出檔案中,然後使用tee
:
sort $opts file[12] | tee output_file