2017-05-07 34 views
0

我有一個文件input.txt,在bash中使用sed,awk或shell腳本如何獲得列中唯一不同的字符串數量?bash - 在文件列中找到不同的字符串

例如:

# cat input.txt 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1axxxxx abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fayyyyyy1c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 
878933fa4965c31c88ee8696a1a5838f abc xyz 

我想挑選並只顯示 「878933fa4965c31c88ee8696a1axxxxx」 和​​ 「878933fayyyyyy1c88ee8696a1a5838f」

+2

前綴代碼有四個空格。請看[編輯幫助](http://stackoverflow.com/editing-help)。 – Cyrus

+1

澄清**爲什麼**這將是預期的輸出,特別是爲什麼'878933fa4965c31c88ee8696a1a5838f'不包括在輸出中。 –

+0

它是一個文件的md5sum編碼。如果一個或兩個文件代碼與15個左右的總數不同,我想選擇一個文件的md5sum。或找出不同步的檔案。 – skumble

回答

0
awk '{print $1}' <file> |uniq -u 
awk '{print $4}' <file> |uniq -u 
0

在純擊:我們聲明

declare -A lines 
while read col1 line ; do lines["$col1"]="$col1 $line" ; done < input.txt 
for i in ${!lines[@]} ; do echo "$i" ; done 

第一變量作爲關聯ar射線。然後我們在一段時間內閱讀它們。然後爲每個鍵(第一列)列出這些行。

0

你的問題是有點含糊,但也許你想打印只出現一次,如果1 $值,所以這將做到這一點:

$ awk '{cnt[$1]++} END{for (i in cnt) if (cnt[i]==1) print i}' file 
878933fayyyyyy1c88ee8696a1a5838f 
878933fa4965c31c88ee8696a1axxxxx 
0

uniq -c會給你一個數,所以,如果你的意思是隻有你可以做一個單一項目的條目:

cut -d " " -f 1 file | sort | uniq -c | awk '$1==1{print $2}' 

或者在perl

perl -lane '$seen{$F[0]}++; END{for (%seen){ print if $seen{$_}==1}}' file 
-1

試試這個:

cat input.txt | uniq -u | awk '{print $1}' 
+1

歡迎來到堆棧溢出!儘管這段代碼片段是受歡迎的,並且可能會提供一些幫助,但它會[如果它包含解釋](/ meta.stackexchange.com/q/114762)* [如何解決該問題,將會大大改進]。沒有這些,你的答案就沒有什麼教育價值了 - 記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。特別是,你需要使用'cat'而不是'uniq'直接從文件中讀取嗎? –

相關問題