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

Find duplicates in particular column of file in bash

我正在尝试在文件的第 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

这是错误的:

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

您在 = 周围有 space 并且行内有新行。

有些像这样:

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;}')

为什么要使用变量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" '[=14=]~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

If key=09 现在将测试列 9 是否有重复项。如果是,打印 yes
tk+0 用于删除前导零,因此 09 变为 9