首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不使用awk或sed的情况下,通过特定列中的值范围过滤.csv文件

在不使用awk或sed的情况下,通过特定列中的值范围过滤.csv文件
EN

Stack Overflow用户
提问于 2020-04-25 13:08:28
回答 2查看 222关注 0票数 0

我有一个csv文件,其中数据以如下方式存储,其中有一个空格作为分隔字符:

代码语言:javascript
复制
181.221.132.87 2020-03-01T06:22:47.775Z "GET / HTTP/1.1" 200 1 "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"

我必须打印第5列(在本例中值为“1”的列)值大于5的所有行。问题是,我受unix命令的限制,并且被告知我不能使用awk或sed。任何不能用提供给我们的命令列表完成的事情都必须用自定义C程序来实现,但是重点是尽可能少地使用自定义程序。

我可以使用的Unix命令如下: cat、curl、削减、echo、exec、egrep、grep头、ls粘贴、printf、排序、尾、tr、uniq、wc。

对不起,如果以前问过类似的问题,但我找不到一个不包括awk或sed的起点

编辑:

代码语言:javascript
复制
{ egrep " "[5-9]{1}" " file.csv; egrep " "[0-9]{2}" "file.csv; }

上面的命令似乎提供了正确的输出,但是我觉得有一个更好的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-25 13:48:06

这就是我想出来的!

代码语言:javascript
复制
egrep --color '^(("[^"]*"|[^"]\S*)\s+){4}([1-9][0-9]|[6-9])' file.csv

解释

  • ^是line
  • ("[^"]*"|[^"]\S*)\s+)的起点,是一个单元,它由2个possibilities:

组成

代码语言:javascript
复制
- `"[^"]*"` This is a string cell, surrounded by quotes, and which cannot contain any quotes in its body
- `[^"]\S*)\s+` This is a normal cell, which can contain anything except white spaces (`\s` is a white space, `\S` is a non white space)

  • {4}我们重复4次,对于前4 cells
  • ([1-9][0-9]|[6-9]),这是你的数字,再一次由2种可能性组成:
    • [1-9][0-9],它比10
    • [6-9]更多,比5

更多

至于彩旗,它..。将颜色添加到命令中,在创建regex时,可以更容易地获得匹配内容的可视化表示:

在某些系统中,默认情况下存在--color,因此您可能看不到其中的区别。

票数 0
EN

Stack Overflow用户

发布于 2020-04-25 14:56:11

无grep

代码语言:javascript
复制
cat log| while read line
do
  v=`echo $line | cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '|cut -f4 -d' ' `
  if [ "$v" -gt 5 ]
  then
    echo $line
  fi                               
done

while read line逐行读取文件

使用cut奇数拆分的字段中没有“偶数”

代码语言:javascript
复制
cut -d'"' --output-delimiter=' ' -f1,3

181.221.132.87 2020-03-01T06:22:47.775Z 200 1

用tr移除双空格

代码语言:javascript
复制
cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '

给出

代码语言:javascript
复制
181.221.132.87 2020-03-01T06:22:47.775Z 200 1

在pos 4点得到切分

代码语言:javascript
复制
cut -d'"' --output-delimiter=' ' -f1,3 | tr -s ' '|cut -f4 -d' '

给出

代码语言:javascript
复制
1

然后在纯bash [ "$v" -gt 5 ]中检查5

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61426132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档