Answers:
用途awk
:
awk -F, '{ print > $2 ".csv" }' file.csv
这将创建两个文件577.csv
,并132.csv
在当前目录。
上面的命令假定您只能具有132
或577
作为第二个字段。它将为整个的第二个字段中找到的每个值创建一个文件名file.csv
。
如果除了您感兴趣的两个值之外还有其他值,并且您想忽略这些行,请执行以下操作:
awk -F, '$2 == "577" || $2 == "132" { print > $2 ".csv" }' file.csv
awk
无法使用的错误实现print > $2 ".cvs"
。在这些文件上,您必须首先计算文件名,然后执行print
:fname = $2 ".cvs"; print > fname
。
将所有577提取到标准输出
grep -e '^.*,577,.*,.*$' youfile.csv >result_extract_557.csv
-根据以下@terdon的注释编辑1更正,以避免当至少3个逗号与577一致时避免错误匹配。
grep -e '^[:alnum:]*,577,[:digit:]*,[:digit:]*$' youfile.csv >result_extract_557.csv
但是我认为他/她的awk
解决方案更全面。
foo577bar
或yp9012,132,8,577
。
.*
也可以匹配逗号,所以您不知道要匹配哪个字段。可能是第二,也可能是第45。我的第二个抱怨是错误的,您是对的,以防逗号不匹配foo577bar
。
使用csvkit
:
$ csvgrep -c 2 -m 577 data.csv >output.csv
该-c 2
品牌cvsgrep
考虑第二列,并与-m 577
我们要求它匹配字符串577
中该列。
以下内容将写入output.csv
:
yp1234,577,1,3
yp5678,577,3,5
要匹配多个字符串并将每个字符串的输出写入文件:
for pattern in 577 132; do
csvgrep -c 2 -m "$pattern" data.csv >"output-$pattern.csv"
done
这将创建两个文件output-132.csv
和output-577.csv
。