我有一个包含大量数据的csv文件。我希望剪掉>=1值的第9列,然后使用grep显示匹配的完整行。
样本格式:
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
我试过了
grep . Myfile.csv |cut -d"," -f9 | sort |grep -E "^(1*[1-9][2-9]*(\.[2-9]+)?|1+\.[2-9]*[1-9][2-9]*)$"
但它只显示第9列的值,而不是所有列的完整行。
而且还
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 (:-
发布于 2021-06-10 08:34:49
尽管您声明awk
是不可能的--为了完整起见:
awk -F',' '$9>=1' input.csv
这将指示awk
将,
视为字段分隔符,并仅打印字段9值等于或大于1的行。
发布于 2021-06-10 09:12:36
使用csvsql
:
假设您的文件csv文件为:
$ 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
这样做可以:
=1 "
您可以在csvfile中的头中使用列名来更改col9
。
使用miller
:
请安装米勒以运行该命令。
mlr --csv filter '$col9 >= 1' input.csv
发布于 2021-06-10 08:53:26
试一试
grep -E "^([^,]+,){8}[1-9][0-9]*(.[1-9]+)?" MyFile.csv
哪里
-E
告诉grep
使用扩展正则表达式^
行开始[^,]+,
不匹配逗号、一个或多个时间、一个逗号( ){8}
重复8次(包括后缀逗号)[1-9][0-9]*(.[1-9]+)?
前导非0可选点部件感谢丹尼尔·朱格的重复模式。
https://unix.stackexchange.com/questions/653643
复制相似问题