在bash中查找特定文件列中的重复项

时间:2015-03-02 06:46:39

标签: bash unix awk

我试图在文件的第9列中找到重复项: 我尝试使用以下代码。我面临语法错误。你能帮忙吗?

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

1 个答案:

答案 0 :(得分: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