如何读取存储在变量[Bash]中的CSV文件

时间:2017-08-03 11:42:50

标签: bash shell csv unix

我想使用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

1 个答案:

答案 0 :(得分:0)

您的问题是,您正在尝试阅读的路径中的一个目录。快速修复将是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-)