我有很多目錄,每個目錄都有不同數量的 CSV 檔案。我有興趣獲取這些目錄及其各自數量的 CSV 檔案的串列。所以我有這個 bash 回圈。
for i in 21 22 23
do
ls my/directory/name$i/*csv | wc -l
完成
問題是,我如何獲得具有這樣輸出的 txt 檔案?
名稱 21 3
名稱 22 5
名稱 23 2
其中第一列對應每個目錄的名稱,第二列對應每個目錄中 CSV 檔案的數量。
uj5u.com熱心網友回復:
您可以將命令的名稱和結果回顯到output.txt:
for i in 21 22 23
do
echo name$i $(ls my/directory/name$i/*csv | wc -l) >> output.txt
done
uj5u.com熱心網友回復:
https://mywiki.wooledge.org/ParsingLsls解釋了使用和決議其輸出會產生錯誤或意外結果的許多場景。例如,使用陣列并計算其中元素的數量會好得多。
for i in 21 22 23; do
files=( my/directory/name$i/*csv )
echo "name$i ${#files[@]}"
done >output.txt
也許還注意到 之后的重定向done,這避免了在回圈內重復打開和關閉同一個檔案。
如果您想移植到sh沒有陣列的 POSIX,請嘗試使用函式。
count () {
echo "$#"
}
for i in 21 22 23; do
echo "name$i $(count my/directory/name$i/*csv)"
done >output.txt
對于穩健性測驗,請嘗試使用有問題的名稱創建檔案,例如
touch my/directory/name21/"file name
with newline".csv my/directory/name22/'*'.csv
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467885.html
上一篇:bash腳本中的引數
