按特定列过滤文本文件行,不带引号

时间:2015-03-21 00:31:29

标签: linux unix csv awk

所以我有一个文件,我只想从中获取某些行,但不幸的是这些行中的字符串没有用引号括起来。如何根据第二列值过滤这些行? 我有:

string a,string b,string c,string d,string e
string 1,string 2,string 3,string 4,string 5
string f,string b,string h,string i,string j
string 6,string 7,string 8,string 9,string 0

我只想要一个新文件:

string a,string b,string c,string d,string e
string f,string b,string h,string i,string j

我正在尝试使用命令:

awk -F '","'  'BEGIN {OFS=","} { if (toupper($2) == "STRING B")  print }' input.csv > output.csv

2 个答案:

答案 0 :(得分:2)

如果您使用-F,而非-F '","',则代码应该有效。一个更惯用的方法是

awk -F, -v OFS=, 'toupper($2) == "STRING B"' input.csv

在awk代码中,没有相关操作的条件意味着如果条件为真,则执行默认操作(打印),这样可以减少绒毛的效果。

答案 1 :(得分:0)

在设置FS值时,您不需要包含双引号。

$ awk -F,  'BEGIN {OFS=","} { if (toupper($2) == "STRING B")  print }' file
string a,string b,string c,string d,string e
string f,string b,string h,string i,string j