2017-08-03 107 views
0

我想使用Shell读取CSV文件, 但由于某种原因,它不起作用。如何读取存储在变量中的CSV文件[Bash]

我用这个来定位我的CSV文件夹

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

最新添加的CSV文件,该计数线。

wc -l $lastCSV 

输出

wc: drupal_site_livinglab.csv: No such file or directory 

如果我赞同它说的文件:drupal_site_livinglab.csv

回答

0

您的问题是,你从你正在尝试读取路径一级目录。快速解决方案将是wc -l "csv-output/$lastCSV"

记住,解析ls -t虽然方便,不完全是稳健的,所以你应该考虑这样的事情来保护你从尴尬的文件名:随着

last_csv=$(find csv-output/ -mindepth 1 -maxdepth 1 -printf '%[email protected]\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最后丢弃时间戳,只留下文件名。

您也可以替换findstat(同样,这假设你有GNU的coreutils):

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

是否有量线存储到另一个变量的方法吗? –

+0

如果你想计算文件的数量,只需使用'files =(csv-output/*);回声“$ {#文件[@]}”'。 –

相关问题