首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux中的Grep和Cut命令

linux中的Grep和Cut命令
EN

Unix & Linux用户
提问于 2021-06-10 08:11:02
回答 5查看 4.5K关注 0票数 0

我有一个包含大量数据的csv文件。我希望剪掉>=1值的第9列,然后使用grep显示匹配的完整行。

样本格式:

代码语言:javascript
运行
复制
ABC,XYZ,RTY,CREAM,FRANCE,170019,ST REMY CREME,3035540005229,0.75,1,15,26.99,10       
ABC,RDS,XSD,SPICE,NETHERLANDS,390476,THE KINGS GINGER,5010493025621,1.5,1,41,49.95,NA      
ABC,RMS,DKS,TABLE WINE RED,CHILE,400176,SANTA ISABELA,63657001349,3,1,12.5,31.99,0    

我试过了

代码语言:javascript
运行
复制
grep . Myfile.csv |cut -d"," -f9 | sort  |grep -E  "^(1*[1-9][2-9]*(\.[2-9]+)?|1+\.[2-9]*[1-9][2-9]*)$"

但它只显示第9列的值,而不是所有列的完整行。

而且还

代码语言:javascript
运行
复制
grep $(cut -d"," -f9 Myfile.csv | grep -E  "^(1*[1-9][2-9]*(\.[2-9]+)?|1+\.[2-9]*[1-9][2-9]*)$") Myfile.csv

任何帮助都会很好。

PS:不能使用awk (:-

EN

回答 5

Unix & Linux用户

发布于 2021-06-10 08:34:49

尽管您声明awk是不可能的--为了完整起见:

代码语言:javascript
运行
复制
awk -F',' '$9>=1' input.csv 

这将指示awk,视为字段分隔符,并仅打印字段9值等于或大于1的行。

票数 13
EN

Unix & Linux用户

发布于 2021-06-10 09:12:36

使用csvsql

假设您的文件csv文件为:

代码语言:javascript
运行
复制
$ cat input.csv
col1,col2,col3,col4,col5,col6,col7,col8,col9,col10,col11,col12,col13
ABC,XYZ,RTY,CREAM,FRANCE,170019,ST REMY CREME,3035540005229,0.75,1,15,26.99,10   
ABC,RDS,XSD,SPICE,NETHERLANDS,390476,THE KINGS GINGER,5010493025621,1.5,1,41,49.95,NA
ABC,RMS,DKS,TABLE WINE RED,CHILE,400176,SANTA ISABELA,63657001349,3,1,12.5,31.99,0

这样做可以:

代码语言:javascript
运行
复制
=1 "

您可以在csvfile中的头中使用列名来更改col9

使用miller

请安装米勒以运行该命令。

代码语言:javascript
运行
复制
mlr --csv filter '$col9 >= 1' input.csv
票数 8
EN

Unix & Linux用户

发布于 2021-06-10 08:53:26

试一试

代码语言:javascript
运行
复制
grep -E "^([^,]+,){8}[1-9][0-9]*(.[1-9]+)?" MyFile.csv

哪里

  • -E告诉grep使用扩展正则表达式
  • ^行开始
  • [^,]+,不匹配逗号、一个或多个时间、一个逗号
  • ( ){8}重复8次(包括后缀逗号)
  • [1-9][0-9]*(.[1-9]+)?前导非0可选点部件

感谢丹尼尔·朱格的重复模式。

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

https://unix.stackexchange.com/questions/653643

复制
相关文章

相似问题

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