unix 命令 cut + grep 提取一些详细信息
unix command cut + grep to extract some detailed information
我需要计算包含以下信息的文件的行数。
- 前2个字符必须是21
- 第54个字符需要为0或6
- 57-58字符需要大于49
如果可能的话,我需要在一个命令中使用它。
我尝试了以下方法:
cut -c 1-2,54 $filename|grep -e 210 -e 216
这给了我前两个条件。
我不知道如何让第三个条件也匹配。
如果我这样做:
cut -c 1-2,54,57-58 $filename|grep -e 210 -e 216
然后我也得到类似 22160
的匹配模式的东西,这是不正确的。
我怎样才能做到这一点?
我认为您可以通过使用 awk
来实现您的目标。
awk '(substr([=10=],1,2)==21 && (substr([=10=],54,1)==0 || substr([=10=],54,1)==6) && substr([=10=],57,2)>49 ){count=count+1} END{print count==""?0:count}' Your_file
简要说明,
substr([=12=],s,l)
:提取[=13=]
的子串,从s
开始,长度为l
我需要计算包含以下信息的文件的行数。
- 前2个字符必须是21
- 第54个字符需要为0或6
- 57-58字符需要大于49
如果可能的话,我需要在一个命令中使用它。 我尝试了以下方法:
cut -c 1-2,54 $filename|grep -e 210 -e 216
这给了我前两个条件。 我不知道如何让第三个条件也匹配。 如果我这样做:
cut -c 1-2,54,57-58 $filename|grep -e 210 -e 216
然后我也得到类似 22160
的匹配模式的东西,这是不正确的。
我怎样才能做到这一点?
我认为您可以通过使用 awk
来实现您的目标。
awk '(substr([=10=],1,2)==21 && (substr([=10=],54,1)==0 || substr([=10=],54,1)==6) && substr([=10=],57,2)>49 ){count=count+1} END{print count==""?0:count}' Your_file
简要说明,
substr([=12=],s,l)
:提取[=13=]
的子串,从s
开始,长度为l