【问题标题】:Passing filename variable to awk in Jupyter notebook在 Jupyter 笔记本中将文件名变量传递给 awk
【发布时间】:2021-01-12 21:44:21
【问题描述】:

我正在使用 Jupyter Notebook。我需要在单元格中运行 awk 命令来检查 csv 文件,以确保每条记录具有相同的列数。我导入 csv 文件:

fname = 'abc.csv'

然后当我在单元格中运行以下 awk 命令时:

*!awk -F',' '{print NF; exit}' abc.csv*

它有效。

但是,如果我希望通过变量fname 为多个文件运行它,如下所示:

*!awk -F',' '{print NF; exit}' fname*

它给了我以下错误:

awk: fatal: cannot open file `fname' for reading (No such file or directory)

我也试过了:

*!awk -F',' '{print NF; exit}' $fname*

在这种情况下,它只会继续运行。但是,根据脚本,它应该在读取第一条记录本身后退出(并且在使用 abc.csv 运行的情况下会退出)。由于我需要使用多个文件运行它,因此我需要 awk 命令将fname 作为输入。

我做错了什么?

谢谢。

【问题讨论】:

    标签: python bash variables awk jupyter-notebook


    【解决方案1】:

    你不能以这种方式在 python 和 bash 之间共享变量

    当您使用!awk 时,您调用shell 解释器,该解释器调用awk 解释器

    如果要共享变量,需要将变量导出为环境变量

    from os import environ
    fname = 'abc.csv'
    
    environ['fname'] = fname
    

    然后你可以像这样将变量传递给awk

    !awk -F',' '{print NF; exit}' "$fname" 
    

    【讨论】:

      猜你喜欢
      • 2017-11-12
      • 2014-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 2018-09-28
      • 1970-01-01
      相关资源
      最近更新 更多