假設有一個file.txt的在下面的內容中的文本寫的是:找到獨特的話
ABC/xyz
ABC/xyz/rst
EFG/ghi
我需要寫一個shell腳本,可以在第一/
之前提取的第獨特字。
所以作爲輸出,我想ABC
和EFG
被寫入一個文件。
假設有一個file.txt的在下面的內容中的文本寫的是:找到獨特的話
ABC/xyz
ABC/xyz/rst
EFG/ghi
我需要寫一個shell腳本,可以在第一/
之前提取的第獨特字。
所以作爲輸出,我想ABC
和EFG
被寫入一個文件。
試試這個:
cat file.txt | tr -s "/" ' ' | awk -F " " '{print $1}' | sort | uniq > outfile.txt
您可以用-u
(爲 「獨一無二」)選件與cut
(斜線作爲分隔符),然後通過管道抽取的第一個字到sort
:
$ cut -d '/' -f 1 file.txt | sort -u
ABC
EFG
要獲得輸出到文件中,只需通過將> filename
添加到命令來重定向。 (或者管tee filename
看到輸出和讓它在文件中。)
可以使用切割的組合和排序,像這樣:
cut -d '/' -f 1 file.txt | sort -u > newfile.txt
第一行抓住任何字符串,直到斜槓/
並將其輸出到newfile.txt中。 第二行對文本進行排序,刪除您可能擁有的任何重複字符串。
當然,你的意思是說'cut -d'/'-f 1 file.txt |排序| uniq -u> newfile.txt' - 由於OP希望在*文件中輸出*。另外'sort -u'可以讓你完全刪除對'uniq'的調用。 –
@NiallCosgrove是的你是對的,我在錯誤的命令後面附加了唯一的結果,我剛剛意識到uniq -u命令會刪除所有重複項,包括第一次出現的字符串,這是我的錯誤。 – TheGirrafish
另一個有趣的變化:
awk -F'/' '{print $1 |" sort -u" }' file.txt > outfile.txt
這不是問題在這裏,但能管和重定向AWK內可以非常方便。
另一個簡單的方法:
cut -d"/" -f1 file.txt|uniq > out.txt
除了'cat'是不必要的,如果後面的文件中出現重複的字符串,而且字符串之間有不同的字符串,它就不起作用。例如:'ABC/xxx \ nEFG/yyy \ nABC/zzz' – user1934428
@ user1934428-同意這可以在沒有'cat'的情況下完成,但命令的問題在哪裏。它會根據您的輸入產生所需的輸出。但是,編輯我的答案刪除貓,並使其更有效率。 – syadav
這是一個不同的「用戶」比問問題的人;) –
你能解釋一下你爲什麼在這裏使用'tr',而不只是'的awk -F '/''? –
Just quik,隨機與數百個可能的解決方案:) –