1

我有一个用逗号分隔的 CSV 文件。我想通过具有确切信息的第二列进行选择"stringPattern"

我试过了:

grep -w "stringPattern"

但它仍然会获取包含字符串 Pattern 的任何字符串。

执行此操作的 awk 方法是什么?

4

4 回答 4

3
awk '$2=="stringPattern"' FS=,

请注意,这是完全匹配,而不是正则表达式。如果你想要一个正则表达式,你可以这样做:

$2 ~ /stringPattern/
于 2013-08-21T23:39:43.020 回答
3
awk -F, '$2 == "stringPattern" < filename
于 2013-08-21T23:42:43.090 回答
1

聚会有点晚了,但是grep有一个额外的选项可能会有所帮助...... :-)

grep联机帮助页:

-o, --only-matching
          Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

让我们制作一个小样本文件;

$ echo -e "col1,col2,col3\npattern1,pattern2,pattern3" > file.csv

现在让我们搜索模式,仅使用-w选项

$ grep --color=always -w "pattern2" file.csv
pattern1,pattern2,pattern3

现在让我们用-w-o搜索模式

$ grep --color=always -ow "pattern2" file.csv
pattern2

现在只返回完全匹配。:-)

...但是如果模式在同一行“重复”怎么办?

让我们更新示例文件并重复上次搜索;

$ echo -e "col1,col2,col3,col4\npattern1,pattern2,pattern3,pattern2" > file.csv

现在搜索返回两个结果 - 但在单独的行上

$ grep --color=always -ow "pattern2" file.csv
pattern2
pattern2

这可能不是你想要的。:-/

于 2018-01-10T19:55:31.897 回答
0
grep -E '^[^,]+,stringPattern,' file
于 2013-08-22T06:14:24.600 回答