如何读取存储在变量中的CSV文件[Bash]
问题描述:
我想使用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
答
您的问题是,你从你正在尝试读取路径一级目录。快速解决方案将是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
最后丢弃时间戳,只留下文件名。
您也可以替换find
与stat
(同样,这假设你有GNU的coreutils):
last_csv=$(stat csv-output/* --printf '%Y\t%n\0' | sort -znr | head -zn1 | cut -zf2-)
是否有量线存储到另一个变量的方法吗? –
如果你想计算文件的数量,只需使用'files =(csv-output/*);回声“$ {#文件[@]}”'。 –