bash --version
bash --version GNU bash,版本3.2.25(1)-release(x86_64-redhat-linux-gnu) 版权所有(C)2005 Free Software Foundation,Inc。
cat filename.txt | cut -d“|” -f1 | tr -d [^:digit:] [:punct:]
[:blank:] | tail -10 | awk'{a [i ++] = $ 0;} {k = length(a)} END {for (i = k; i> = 1; i - )if(5 == 5){print i“”a [i]“”a [i-1]“”k}}'
10 10
9 18410 10
8 18410 18409 10
7 18409 18408 10
6 18408 18407 10
5 18407 18406 10
4 18406 18405 10
3 18405 18404 10
2 18404 18403 10
1 18403 18402 10
cat filename.txt|cut -d "|" -f1|tr -d [^:digit:][:punct:] [:blank:]|tail -10|awk '{a[i++]=$0;}{k=length(a)}END{for (i=k;i>=1;i--)if ((a[i]-1)==a[i-1]){print i " "a[i] " "k} else print "not done"}'
not done
not done
not done
not done
not done
not done
not done
not done
not done
not done
如果前面的数字小于x
,则尝试获取最大数字x
。
wc -l
没有给出我需要的行数。我不需要行数。
使用cut
提取的列是此csv文件中的主键。
文件最后可能有未知数量的空白行。
cat filename.txt|cut -d "|" -f1|tr -d [^:digit:][:punct:] [:blank:]|tail -10
18402
18403
18404
18405
18406
18407
18408
18409
18410
为什么这个条件评估采取“其他行动”? (a [i] -1 == a [i-1])评估为假。我不明白为什么。
答案 0 :(得分:1)
给出以下CSV文件(filename.txt
):
1a|b|123
2a|b|123
3|4
5.7|4
66
67
10|11
11|aaa
我们可以使用以下方式确定数字67:
awk -f s.awk filename.txt
其中s.awk
是:
BEGIN {
FS="|"
}
NF>=1 {
q=$1
gsub(/([^[:digit:]])|([[:blank:][:punct:]])*/,"",q)
if (q==(prev+1))
if (q>max)
max=q
prev=q
}
END {
print "Max=" max
}
<强>更新强>
单线可能看起来像:
awk 'BEGIN { FS="|" } { q=$1; gsub(/([^[:digit:]])|([[:blank:][:punct:]])*/,"",q); if (q==(prev+1)) {if (q>max) max=q} prev=q } END { print "Max=" max }' filename.txt