所以我有一个文本文件,其中包含如下行:
http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]
http://m.cb/.ho/ (Status: 200) [Size: 0]
http://sm.jo/.hK/ (Status: 200) [Size: 0]`
我只想 grep Size 在 1 到 100 之间的行。
所以输出将是:
http://sg.ovies.m/.ss/ (Status: 200) [Size: 128]
http://sg.mo.v/.dev/ (Status: 200) [Size: 12328]
http://som.b/.hal/ (Status: 200) [Size: 1238]
如何使用 grep 或 awk 完成此操作?
答案1
Awk 让这变得简单:
awk '{size=$5; sub(/]/, "", size); size=size+0; if (size <= 100 && size >= 1) {print $0 } }' file_to_read.txt
用更友好的方式写这个:
awk '{
# create a new variable "size".
# items are separated by spaces, we need the 5th item
size=$5;
# remove the trailing "]"
sub(/]/, "", size);
# make sure size is an int
size=size+0;
# Choose rows with seize between 1 and 100
if (size <= 100 && size >= 1) {
# print the whole line
print
}
}' file_to_read.txt
答案2
考虑到该:
字符仅出现在输入中的 3 个位置,我们可以将其用作字段分隔符,然后通过子字符串提取数字进行比较(考虑前导空格):
awk -F':' '{size=substr( $NF,2,length($NF)-2 ); if((size>=1)&&(size<=100)) print }' input.txt
请注意,您要求“大小:介于 1 到 100 之间”。但是,您的示例输出显示为“大小大于 1”。如果是这样的话,那么 if 语句可以简化为if(size > 1) print
答案3
下面的模式应该可以做到:
grep -E 'Size: (?:100|[1-9]|[0-9]{2})]' test
我告诉 grep 使用扩展正则表达式语法 ( -E
) 并尝试匹配100
以下 0 到 99 之间的一个值Size: