大家好,
我有一个文件,其中每行都出现以下格式的字符串:
STRING1
STRING2
STRING1
STRING1
STRING1
STRING3
STRING4
STRING4
STRING5
STRING6
STRING5
我想使用 bash 脚本查找文件中连续出现的字符串。例如,在上面的例子中,STRING1
和STRING4
连续出现,并且应该出现在输出中。请注意,即使STRING5
出现两次,它也不是连续出现的。
我不想对文件进行排序,因为文件大小通常很大,这会增加开销。用户将提供字符串,脚本将告知该字符串是否在文件中连续出现。
仅供参考,字符串后面可能有不需要的空格。
答案1
$ uniq -d <<< 'STRING1
> STRING2
> STRING1
> STRING1
> STRING1
> STRING3
> STRING4
> STRING4
> STRING5
> STRING6
> STRING5'
STRING1
STRING4
答案2
awk -v "key=STRING4" '
$1 == key && $1 == prev {
print key " appears on consecutive lines on line " NR
found=1
exit 0
}
{prev = $1}
END {if (! found) {print key " does not appear on consecutive lines"; exit 1}}
' filename
答案3
那么读取和字符串比较呢?对我来说这似乎是最简单的解决方案。
while read line; do
if [ "$line" == "$temp" ]; then
echo "$line";
fi;
temp=$line;
done < test.txt