我正在过滤一个包含数字和名称的文本文件,我希望只打印包含三个连续数字集的行。输入列表:
123 321 567 765 124 5689 12345.输出应包含:
123 321 567 765 12345我已经尝试过这个命令
awk ' {split ("", N) # delete array N
L = 1 # initialize boolean L to TRUE
for (i=1; i<=length($1); i++){ # for each digit
P = substr($1, i, 1)
if (N[P-1] || N[P+1]){ # if contiguous digit exists,
L = 0 break # set L to FALSE; and quit the for loop
} N[P] = 1 } } L ' file 但它并没有像预期的那样工作。
我喜欢使用任何sed、grep或awk命令。
发布于 2018-10-25 08:55:36
这是3个连续(升序或降序)数字的基本正则表达式。
(?:012|123|234|345|456|567|678|789)|(?:987|876|765|654|543|432|321|210)
https://regex101.com/r/hd5PzR/1
你可以用\d*(?:(?:012|123|234|345|456|567|678|789)|(?:987|876|765|654|543|432|321|210))\d*来装饰它
如果需要的话。
发布于 2018-10-25 05:58:51
你是在寻求家庭作业方面的帮助,还是想解决一个问题?如果是后者,那么在组合如此之少的情况下使用算法方法就像使用链锯切黄油一样。考虑以下脚本:
mystring="012 123 234 567 678 789"
revstring=$(echo $mystring|rev)
checkstring="$mystring $revstring"
for checkno in $(echo $checkstring);
do
grep $checkno numbers
done请注意,这将为包含多个序列的行提供重复的输出,但只需通过|sort -u运行该命令即可消除它们。
https://stackoverflow.com/questions/52977074
复制相似问题