gpt4 book ai didi

regex - 在标记字符之后选择具有 n 个相同字段的行

转载 作者:太空狗 更新时间:2023-10-29 11:27:05 26 4
gpt4 key购买 nike

在我的文件中,每一行都包含五个由空格分隔的数字字段(前后有更多字段)。通过 shell 脚本,我需要能够在这五个数字字段中选择恰好具有 3、4 和 5 个相同条目的行(即三个单独的搜索,这样在这些字段中搜索具有 3 个匹配项的行也不会返回具有在这些字段中匹配 4 或 5 个)。

要查找相关字段,我的搜索必须找到一行中的第一个左括号和右括号。括号关闭后,紧接着的五个字段是我感兴趣的字段。一个潜在的并发症:有时一个或多个数字字段被单个破折号/连字符代替数字。一种潜在的简化方法:五个字段将按(非严格)升序排列,任何连字符条目将始终位于其余数字字段之前。

对于 sed/awk 的一些建议,我将不胜感激。非常感谢!

[编辑]:我可以提取相关字段(详见下面的评论),因此上面的删除线段落是不必要的。这是提取相关字段后的示例数据:

109 110 111 111 112
110 110 111 111 112
99 99 99 112 112
99 99 99 112 112
100 101 101 112 112
102 102 102 112 112
102 102 103 112 112
102 103 103 112 112
102 104 104 112 112
102 104 104 112 112
103 104 104 112 112
102 105 105 112 112
102 105 105 112 112
103 105 105 112 112
102 106 106 112 112
102 106 107 112 112
103 106 107 112 112
104 106 107 112 112
102 107 107 112 112
104 107 107 112 112
104 107 107 112 112
106 107 108 112 112
107 107 108 112 112
107 107 108 112 112
102 109 109 112 112
102 109 109 112 112
104 109 109 112 112
102 109 110 112 112
103 109 110 112 112
104 109 110 112 112
102 110 110 112 112
104 110 110 112 112
104 110 110 112 112
107 109 111 112 112
107 109 111 112 112
106 110 111 112 112
107 110 111 112 112
107 110 111 112 112
109 110 112 112 112
110 110 112 112 112
107 112 112 112 112
112 112 112 112 112

当这些行上的 n=3 时,这应该会产生命中:

99 99 99 112 112
99 99 99 112 112
102 102 102 112 112
109 110 112 112 112
110 110 112 112 112

当这条线上的 n=4 时命中:

107 112 112 112 112

当这条线上的 n=5 时命中:

112 112 112 112 112

最佳答案

这是一个使用 awk 的 Bash 脚本解决方案。它逐行读取文件并使用AWK associative array。计算一个数字出现在该行上的次数。将 filename.txt 更改为包含数字的文件。

n=3
while read line
do
echo "$line" | awk -v n="$n" '
{
for(i=1; i <= NF; i++) {
a[$i]++
}
}
{
for(o in a) {
if (a[o] == n) {
print
}
}
}
'
done < filename.txt

关于regex - 在标记字符之后选择具有 n 个相同字段的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34602978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com