【问题标题】:How to read CSV file stored in variable如何读取存储在变量中的 CSV 文件
【发布时间】:2018-01-10 23:58:02
【问题描述】:

我想使用 Shell 读取 CSV 文件, 但由于某种原因,它不起作用。

我用它在我的 csv 文件夹中找到最新添加的 csv 文件

lastCSV=$(ls -t csv-output/ | head -1)

这个来计算行数。

wc -l $lastCSV

输出

wc: drupal_site_livinglab.csv: No such file or directory

如果我回显它说的文件:drupal_site_livinglab.csv

【问题讨论】:

    标签: bash shell csv unix


    【解决方案1】:

    您的问题是您在尝试读取的路径的上一级目录。快速修复将是wc -l "csv-output/$lastCSV"

    请记住,虽然解析 ls -t 很方便,但并不完全可靠,因此您应该考虑这样的事情来保护您免受尴尬的文件名:

    last_csv=$(find csv-output/ -mindepth 1 -maxdepth 1 -printf '%T@\t%p\0' |
      sort -znr | head -zn1 | cut -zf2-)
    wc -l "$last_csv"
    
    • GNU find 列出所有文件及其最后修改时间,使用空字节分隔输出以避免文件名尴尬的问题。
      • 如果删除-maxdepth 1,这将成为递归搜索
    • GNU sort 按从最新到最旧的顺序排列文件,-z 接受空字节分隔的输入。
    • GNU head -z 返回排序列表中的第一条记录。
    • 最后的 GNU cut -z 会丢弃时间戳,只留下文件名。

    您也可以将find 替换为stat(同样,这假设您拥有GNU coreutils):

    last_csv=$(stat csv-output/* --printf '%Y\t%n\0' | sort -znr | head -zn1 | cut -zf2-)
    

    【讨论】:

    • 有没有办法将行数存储到另一个变量中?
    • 如果要统计文件个数,用files=( csv-output/* ); echo "${#files[@]}"即可。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2021-09-03
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多