Unix grep条件并在字符串中打印另一个值
在交易所需时间在2-3分钟之间的情况下,如何grep和打印以下行中“transaction”一词后面的交易编号?以下时间以毫秒为单位。如果我能把文件名和匹配项一起打印出来,会有帮助的Unix grep条件并在字符串中打印另一个值,unix,grep,Unix,Grep,在交易所需时间在2-3分钟之间的情况下,如何grep和打印以下行中“transaction”一词后面的交易编号?以下时间以毫秒为单位。如果我能把文件名和匹配项一起打印出来,会有帮助的 Time taken to process transaction 2599500398 is 1000 ms Time taken to process transaction 2599500398 is 450640 ms Time taken to process transaction 2599500398
Time taken to process transaction 2599500398 is 1000 ms
Time taken to process transaction 2599500398 is 450640 ms
Time taken to process transaction 2599500398 is 638244 ms
使用awk:
awk '{ if (($8*0.001)/60>=2 && ($8*0.001)/60<=3) { print $6" - "FILENAME } }' *.files
awk'{if(($8*0.001)/60>=2&&($8*0.001)/60不要使用grep,因为你想计算你得到的值。当你说“2-3分钟”时,你的意思是“ms在120000到23999ms之间”,而grep不懂数值。它只懂字符串的模式。有些人会试图用诡计多端的正则表达式来解决这个问题,但不要被引诱走上悲伤的道路
只要这样做:
awk '/Time taken to process transaction/ && ($8 >= 120000) && ($8 < 240000) { print "Trx", $6, "took", $8, "ms" }' times.txt
awk'/处理事务所用的时间/&&($8>=120000)和($8<240000){print“Trx”、$6,“take”、$8,“ms”}times.txt
在您的示例中不会打印任何内容,因为您的所有时间都在数值范围之外。请使用以下Perl one liner:
perl -lne 'my ( $tid, $time ) = /transaction\s+(\d+)\s+is\s+(\d+)\s+ms/; 2000 <= $time and $time <= 3000 and print "$ARGV: $tid";' in_file(s)
perl-lne'my($tid,$time)=/transaction\s+(\d+)\s+is\s+(\d+)\s+ms/;2000