根据行值

时间:2016-07-08 20:23:41

标签: csv awk sed data-extraction

我正在尝试使用awk / sed根据行值提取特定的列数据。我的实际文件有15列和超过1,000行(来自.csv文件。)

简单示例:输入;一个总共有5列和100行的cdv文件。输出;第2列到第5列的数据基于第2列的特定行值。(我有一个特定的行值列表,我想让运算符过滤掉。值是数字。)

文件如下所示:

"Date","IdNo","Color","Height","Education"
"06/02/16","7438","Red","54","4"
"06/02/16","7439","Yellow","57","3"
"06/03/16","7500","Red","55","3" 

最近在AWK尝试:

#!/usr/bin/awk -f 
#I need to extract a full line when column 2 has a specific 5 digit    value
awk '\
BEGIN { awk -F "," \    
{
    if ( $2 == "19650" ) { \
       {print $1 "," $6} \ 
}
exit }     

chmod u+x PPMDfUN.AWK

操作员回复:

/var/folders/1_/drk_nwld48bb0vfvdm_d9n0h0000gq/T/PPMDfUN-     489939602.998.AWK.command ; exit;
/usr/bin/awk: syntax error at source line 3 source file    /private/var/folders/1_/drk_nwld48bb0vfvdm_d9n0h0000gq/T/PPMDfUN-   489939602.997.AWK
context is
awk >>>  ' <<< 
/usr/bin/awk: bailing out at source line 17
logout

输出示例:如果第2列等于7439&amp; 7500。

“Date","IdNo","Color","Height","Education"
"06/02/16","7439","Yellow","57","3"
"06/03/16","7500","Red","55","3" 

2 个答案:

答案 0 :(得分:0)

你去......

 $ awk -F, -v q='"' '$2==q"7439"q' file

"06/02/16","7439","Yellow","57","3"

除了为双引号定义的便捷变量q之外,没有太多要解释的内容有助于消除转义。

答案 1 :(得分:0)

awk -F, 'NR<2;$2~/7439|7500/' file
"Date","IdNo","Color","Height","Education"
"06/02/16","7439","Yellow","57","3"
"06/03/16","7500","Red","55","3"