我目前正在开发一个电子表格项目,我需要在其中输出一个只包含列中特定条目的副本。以下是我在第3栏中找到一个条目的内容。
awk -F ',' -v OFS=',' '($3=6411){print}' testdata.csv > testdatacopy.csv
但是如果我想找到6411以及另一个条目,例如6311,我该怎么做?
我试过了:
awk -F ',' -v OFS=',' '($3=6411,6311){print}' testdata.csv > testdatacopy.csv
但这没效果。
答案 0 :(得分:3)
参考awk boolean operations,您需要awk -F ',' -v OFS=',' '($3~/^6(3[12357]1|399|411)$/){print}' …
之类的内容
另请参阅the book on sed and awk中的第一个“注意”。
确保您注意到关系运算符“==”(“等于”)与赋值运算符“=”(“等于”)不同。
如果您希望匹配大量可能的值,使布尔表达式变得繁琐,您可以尝试以下方法之一:
6311
6321
6331
6351
6371
6399
6411
或awk … 'BEGIN { '\
'split("6311 6321 6331 6351 6371 6399 6411", v, " ");'\
for(i in v){ a[v[i]] = 1;}\
}($3 in a){print}' file_in.csv > file_out.csv
awk … '($3>=6311 && $3<=6411)' …
答案 1 :(得分:2)
模式匹配的默认操作是打印:
awk -F, '$3==6411 || $3==6311' testdata.csv > testdatacopy.csv
答案 2 :(得分:0)
或者你可以做一个正则表达式“或”匹配:
awk -F',' -v OFS=',' '($3 ~/6411|6311/){print}' t.csv
编辑:Ed Morton提出了一个很好的观点 - 这将匹配“64112”和“86411”等等,如果ID进入更长的数字,除非您锚定正则表达式以锁定字段的开头和结尾