ls | 的打印输出wc -l 在包含两列的 txt 文件中
printing output of ls | wc -l in a txt file with two columns
我有很多目录,每个目录中都有不同数量的 CSV 文件。我有兴趣获取这些目录及其各自数量的 CSV 文件的列表。所以我有这个 bash 循环。
for i in 21 22 23
do
ls my/directory/name$i/*csv | wc -l
done
问题是,我如何获得一个带有这样输出的 txt 文件?
name21 3
name22 5
name23 2
其中第一列对应每个目录的名称,第二列对应每个目录中CSV文件的数量。
您可以将命令的名称和结果回显到 output.txt
:
for i in 21 22 23
do
echo name$i $(ls my/directory/name$i/*csv | wc -l)
done > output.txt
https://mywiki.wooledge.org/ParsingLs 解释了一些使用 ls
并解析其输出会产生错误或意外结果的场景。你会过得更好使用数组并计算其中的元素数。
for i in 21 22 23; do
files=( my/directory/name$i/*csv )
echo "name$i ${#files[@]}"
done >output.txt
也许还注意到done
之后的重定向,这避免了在循环内重复打开和关闭同一个文件。
如果您想移植到没有数组的 POSIX sh
,请尝试一个函数。
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
我有很多目录,每个目录中都有不同数量的 CSV 文件。我有兴趣获取这些目录及其各自数量的 CSV 文件的列表。所以我有这个 bash 循环。
for i in 21 22 23
do
ls my/directory/name$i/*csv | wc -l
done
问题是,我如何获得一个带有这样输出的 txt 文件?
name21 3
name22 5
name23 2
其中第一列对应每个目录的名称,第二列对应每个目录中CSV文件的数量。
您可以将命令的名称和结果回显到 output.txt
:
for i in 21 22 23
do
echo name$i $(ls my/directory/name$i/*csv | wc -l)
done > output.txt
https://mywiki.wooledge.org/ParsingLs 解释了一些使用 ls
并解析其输出会产生错误或意外结果的场景。你会过得更好使用数组并计算其中的元素数。
for i in 21 22 23; do
files=( my/directory/name$i/*csv )
echo "name$i ${#files[@]}"
done >output.txt
也许还注意到done
之后的重定向,这避免了在循环内重复打开和关闭同一个文件。
如果您想移植到没有数组的 POSIX sh
,请尝试一个函数。
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