2017-08-03 112 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/*);回聲「$ {#文件[@]}」'。 –

相關問題