2016-05-24 52 views
0

假設有一個file.txt的在下面的內容中的文本寫的是:找到獨特的話

ABC/xyz 
ABC/xyz/rst 
EFG/ghi 

我需要寫一個shell腳本,可以在第一/之前提取的第獨特字。

所以作爲輸出,我想ABCEFG被寫入一個文件。

回答

0

試試這個:

cat file.txt | tr -s "/" ' ' | awk -F " " '{print $1}' | sort | uniq > outfile.txt 
+0

你能解釋一下你爲什麼在這裏使用'tr',而不只是'的awk -F '/''? –

+0

Just quik,隨機與數百個可能的解決方案:) –

2

您可以用-u(爲 「獨一無二」)選件與cut(斜線作爲分隔符),然後通過管道抽取的第一個字到sort

$ cut -d '/' -f 1 file.txt | sort -u 
ABC 
EFG 

要獲得輸出到文件中,只需通過將> filename添加到命令來重定向。 (或者管tee filename看到輸出讓它在文件中。)

0

可以使用切割的組合和排序,像這樣:

cut -d '/' -f 1 file.txt | sort -u > newfile.txt 

第一行抓住任何字符串,直到斜槓/並將其輸出到newfile.txt中。 第二行對文本進行排序,刪除您可能擁有的任何重複字符串。

+0

當然,你的意思是說'cut -d'/'-f 1 file.txt |排序| uniq -u> newfile.txt' - 由於OP希望在*文件中輸出*。另外'sort -u'可以讓你完全刪除對'uniq'的調用。 –

+1

@NiallCosgrove是的你是對的,我在錯誤的命令後面附加了唯一的結果,我剛剛意識到uniq -u命令會刪除所有重複項,包括第一次出現的字符串,這是我的錯誤。 – TheGirrafish

0

另一個有趣的變化:

awk -F'/' '{print $1 |" sort -u" }' file.txt > outfile.txt 

這不是問題在這裏,但能管和重定向AWK內可以非常方便。

0

另一個簡單的方法:

cut -d"/" -f1 file.txt|uniq > out.txt 
+0

除了'cat'是不必要的,如果後面的文件中出現重複的字符串,而且字符串之間有不同的字符串,它就不起作用。例如:'ABC/xxx \ nEFG/yyy \ nABC/zzz' – user1934428

+0

@ user1934428-同意這可以在沒有'cat'的情況下完成,但命令的問題在哪裏。它會根據您的輸入產生所需的輸出。但是,編輯我的答案刪除貓,並使其更有效率。 – syadav

+0

這是一個不同的「用戶」比問問題的人;) –