【问题标题】:Extract column data from csv file based on row values根据行值从 csv 文件中提取列数据
【发布时间】:2016-07-08 20:23:40
【问题描述】:

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

简单示例:输入;一个 cdv 文件,共有 5 列和 100 行。输出;第 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 和 7500,我想要整行。

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

【问题讨论】:

  • 你想要解决方案是python还是awk?
  • 您的问题目前非常不清楚。 edit 它提供了一个minimal reproducible example,包括简洁、可测试的样本输入和预期的输出,以及您迄今为止尝试过的内容。还要确保你的例子是准确的,例如您输入的第三行真的是否包含'7439',Yellow'Yellow' 之前没有单引号)?
  • 致哈尼:两者都可以。我在 csh。
  • 您的文件是逗号分隔的,'\t' 是制表符。此外,这些字段是单引号,而不是双引号。最后,19650 是一个五位数而不是四位数。
  • 语法错误是因为你在赋值 -F “\t" 的开头使用了一些奇怪的大花字符 () 而不是双引号字符 (") 所以 awk 不知道怎么办。在示例输入中,您还有一些其他奇怪的卷曲字符 () 与单引号 (') 交织在一起。鉴于此以及@karakfa 之前指出的内容,@ 987654323@ 您的问题是有意义的,并且使用了一致、正确的字符,因此您可以帮助我们了解您想要的内容,以便我们开始为您提供解决方案而不是仍然在How to Ask这个问题上。

标签: csv awk sed data-extraction


【解决方案1】:

给你...

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

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

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

【讨论】:

  • 这行得通,谢谢。现在,我必须打印到一个 out_put_file(最好是 .csv)
  • 虽然代码通常不言自明,但最好在代码中添加一些解释。这会在审核队列中弹出,因为只有代码的答案往往如此。
【解决方案2】:
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" 

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 2021-09-26
    • 2019-08-23
    • 1970-01-01
    • 2016-12-06
    • 2017-06-26
    • 2021-11-28
    • 1970-01-01
    相关资源
    最近更新 更多