Shell Unix-搜索值并在第行之前打印

Shell Unix-搜索值并在第行之前打印,shell,unix,aix,Shell,Unix,Aix,我有以下输入和输出需要 输入: insert xxx to table xx.xxx. 1 insert yyy to table yy.yyy 10000 输出: insert yyy to table yy.yyy 10000 我想在值>=10000之前打印a行 我没有发疯: awk '($1>10000) {print$1)' < log2 > log3 | awk '/[0-9]$/ {print $1)' < log 您可以使用此awk: awk '/10

我有以下输入和输出需要

输入:

insert xxx to table xx.xxx.
1
insert yyy to table yy.yyy
10000
输出:

insert yyy to table yy.yyy
10000
我想在值>=10000之前打印a行

我没有发疯:

awk '($1>10000) {print$1)' < log2 > log3 | awk '/[0-9]$/ {print $1)' < log
您可以使用此awk:

awk '/10000/{print line ORS $0} {line=$0}' file
insert yyy to table yy.yyy
10000

如问题中所述,您需要获得示例行的before行和模式“10000”,对吗

我认为最简单的方法是使用grep:

grep -B 1 '^([1-9]\d{4,})$' file
或者,如果要将其打印到输出文件:

grep -B 1 '^([1-9]\d{4,})$' file > outputFile
它获取以1开头,后面有4个或更多数字的值。^和$以保证行中只包含数值,^是行的开头,$是行的结尾

对于您建议的输入,这将输出:

insert yyy to table yy.yyy
10000
您可以使用以下代码:

awk '{if (($1+0==$1) && $1 >= 10000) {print a; print}; a=$0}' < input
这里,$1+0==$1确保$1是一个数字,$1>=10000检查它是否小于10000。如果两个条件都满足,它将打印当前行和最后一行,这两行是使用a=$0保存的