2015-03-02 32 views
0

我正在嘗試使用以下代碼嘗試在第9列文件中找到重複項: 。我面臨語法錯誤。你能幫忙嗎?在bash文件的特定列中找到重複項

feed="09SPP" 
key=${feed:0:2} 
echo $key 
m = `sort SPP_OUT | awk -v tk=$key '{dup[tk]++} 
END { for (i_1 in dup) if (dup[i_1]>1) print i_1;}'` 
echo $m 
+0

也讓我知道,如果上述邏輯來查找重複正確 – Madan 2015-03-02 07:16:01

回答

2

這是錯誤的:

m = `sort SPP_OUT | awk -v tk=$key '{dup[tk]++} 
END { for (i_1 in dup) if (dup[i_1]>1) print i_1;}'` 

您有大約=和行內空間的新線。

一些這樣的:

m=`sort SPP_OUT | awk -v tk=$key '{dup[tk]++} END { for (i_1 in dup) if (dup[i_1]>1) print i_1;}'` 

甚至更​​好,沒有使用過時且不適用背抽動,使用括號。

m=$(sort SPP_OUT | awk -v tk=$key '{dup[tk]++} END { for (i_1 in dup) if (dup[i_1]>1) print i_1;}') 

Wy使用變量i_1?使得它很難看,只要使用i並刪除最後;

m=$(sort SPP_OUT | awk -v tk=$key '{dup[tk]++} END { for (i in dup) if (dup[i]>1) print i}') 

@Madan如果你想測試,如果key在文本超過一重擊,這樣做:

m=$(awk -v tk="$key" '$0~tk {a++} END {if (a>1) print a}' SPP_OUT) 

測試n行是否有重複:

awk -v tk="$key" '++a[$(tk+0)]==2 {f=1} END {if (f) print "yes"}' file 

如果key=09它現在將測試以查看列9是否有重複。如果是這樣,打印yes
tk+0是用來刪除前導零,所以09成爲9

+0

我能夠執行的命令。但我得到列值09.但我沒有得到重複值。 – Madan 2015-03-02 06:59:52

+0

@Madan編輯您的原始文章添加示例數據,以及您如何喜歡輸出。 – Jotne 2015-03-02 07:26:29

+0

@Madan你沒有測試任何東西,所以'{dup [tk] ++}'這一直是真的。如果'key'是'pattern',那麼每行都會有一個變量'dup [pattern]'增量。你喜歡測試一下這行是否在'pattern'內,然後遞增? – Jotne 2015-03-02 07:50:59

相關問題