awk多重模式匹配

时间:2018-05-18 11:50:43

标签: awk

我想跳过第一行和最后一行文件。在剩余的记录中,如果记录长度大于300,第三个字符应为k或m。有没有将这些验证结合在一起

跳过

awk 'NR>2{print v}{v=$0}' txtfile

长度

awk 'length($0) > 300' 

3个字符

awk '{print substr($0,3,1))}'

无论如何,我可以把所有这些放在一起 谢谢。

3 个答案:

答案 0 :(得分:0)

这个awk单行将在第last-1行之前进行第二行并进行m/k匹配:

awk 'NR>1&&/^..[mk]/&&length($0)>300{if(NR>2)print p; p=$0}' file

答案 1 :(得分:0)

首先是OP中未提供的一些示例数据:

$ cat file
first
print
nok
nom
sixsix
last

length()<6比较,替换为300左右:

$ awk 'b!~/^..[km]/&&length(b)<6&&NR>2{print b}{b=$0}' file
print

说明:

$ awk '
b !~ /^..[km]/ && length(b)<6 && NR>2 { print b } # analyze and print b, the buffer
{ b=$0 }' file                                    # buffer record for next iteration
  • NR>2处理第一条记录
  • 缺少END{},打印缓冲区b处理最后一条记录
  • b !~ /^..[km]/第三个字符是k或m
  • length(b)<6处理缓冲区的长度

答案 2 :(得分:0)

以下将处理以防你的Input_file在你的Input_file中也有大写字母,例如 - > KM,因为我将线路转换为较低的比较,所以它也应该抓住它们

awk 'prev{print prev;prev=""} FNR>1 && (substr(tolower($0),3,1)=="m" || substr(tolower($0),3,1)=="k") && length($0)>300{prev=$0} '  Input_file

代码说明:

awk '
prev                                                                                     {##Checking condition here if variable prev is NOT NULL then do following.
  print prev;                                                                             ##Printing the value of variable prev here.
  prev=""}                                                                                ##Making variable prev value as NULL here.
FNR>1 && (substr(tolower($0),3,1)=="m" || substr(tolower($0),3,1)=="k") && length($0)>300{##Checking conditions 1st- Making sure line number is greater than 1. 2nd- checking if 3rd character of current line is either m or k then 3rd condition if line length is greater than 300, if ALL conditions are TRUE then do following.
  prev=$0}                                                                                ##Setting variable prev value to current line then.
'  Input_file                                                                             ##Mentioning Input_file name here.