【问题标题】:awking for nth column in csv [closed]awking csv 中的第 n 列 [关闭]
【发布时间】:2018-07-08 23:03:09
【问题描述】:

制作了一个文件.csv。有 3 行。

"ip","count","filename"
"1.1.1.1","57","somefilename1"
"2.2.2.2","30","2somefilename-2"

试图以 3 美元的价格 awk,所以它应该只列出第 3 列。

我尝试了几种方法:

awk '{print $3}' filename.csv  

输出为空白,我期待的只是第 3 列

试过了:

awk '{print $1}' 文件名.csv

显示完整文档而不仅仅是第一列,没有任何内容被过滤。

我搜索了 stackoverflow 并尝试了其他一些方法。但由于某种原因,我要么得到完整的行,要么什么都没有。

我缺少什么听起来很简单

【问题讨论】:

  • awk -v FS="," '{print $3}' filename.csv 你需要告诉awk 使用什么作为字段分隔符(FS)。默认情况下它的空白。
  • Awk 中的默认字段分隔符是一个空格序列。您缺少 awk -F, 来使用逗号。投票结束是一个琐碎的错字。
  • 您的输入文件有 unicode 引号()而不是 ascii 引号("),您是否从 DOS 编辑器复制粘贴此文件? (windows - 记事本/记事本++)
  • @chowpay 您可以将字符串用作FS,但要小心。此外,找出答案的最佳方法是尝试。

标签: bash csv awk terminal


【解决方案1】:

您应该使用 -F 作为“字段分隔符”,您可以在 awk 的手册页中找到它,如下所示:

awk -F, '{print $3}' Input_file
”filename”
”somefilename1”
”2somefilename-2”

【讨论】:

    【解决方案2】:

    使用,作为字段分隔符:

    awk -F ',' '{print $3}' filename.csv 
    

    【讨论】:

      【解决方案3】:

      以下awk 解决方案可能对您有所帮助。 如果您想使用" 获得输出,那么以下可能会有所帮助:

      awk -F, '{print $3}'  Input_file
      

      如果您需要没有" 的第三列的值,那么以下内容可能会对您有所帮助:

      awk -F',|"' '{print $(NF-1)}'  Input_file
      

      【讨论】:

      • 很好地拿起 ;-) +1!
      【解决方案4】:

      默认awk 使用空格作为字段分隔符,如其他帖子中所述,您需要将, 配置为字段分隔符,否则整行将被视为一个字段。为此,您可以在以下 2 种语法中进行选择:

      awk -F',' '{print $3}' input.csv #to avoid bad surprises with you shell trying to interpret your field separator put it between simple quotes.  
      

      或者您也可以在 BEGIN 子句中定义,或者在执行期间的任何时候使用以下语法:

      awk 'BEGIN{FS=","}{print $3}' input.csv
      

      【讨论】:

        猜你喜欢
        • 2015-01-23
        • 1970-01-01
        • 1970-01-01
        • 2021-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多