我有一个输入文件 file.csv
(数据以逗号分隔符分隔),它只有 3 个以逗号分隔的行。数据将是文件名。
例如:
test,test1,test2,test3,,n
a,b,c,d,,n
p,q,r,s,,n
现在,我要求 file.csv
文件的第一行数据是否存在于目录 abc
中,命令 ls -lrt
。此命令的输出应重定向到文本文件 a.txt
。
例如:
ls -lrt test
ls -lrt test1
....
下一步:使用命令 ls -lrt
在目录 abc
中的 file.csv
数据的第二行。此命令的输出应附加到文本文件 a.txt
。
例如:
ls -lrt a
ls -lrt b
....
下一步:使用命令 ls -lrt
在目录 xyz
中的 file.csv
数据的第三行。此命令的输出应附加到文本文件 a.txt
。
例如:
ls -lrt p
ls -lrt q
....
示例输出:
-rw-r--r-- 1 dba dba 122 Jan 21 06:44 test
ls: p: No such file or directory
我怎样才能做到这一点?
最佳答案
可能是这样的:
dirs=(abc abc xyz)
index=1
while read -r line; do
IFS=,
for f in $line; do
ls -lrt "${dirs[$index]}/$f" 2>&1
done
let index++
done <file.csv >a.txt
保留一个目录数组来检查每次迭代并不是特别优雅;或许您可以将您的输入数据或问题陈述整理成内部一致的内容。
数组是 Bash 的一个特性,所以不能与 sh
一起使用(但在 ksh
和 zsh
中也以类似的形式得到支持,我相信)。
如果您不使用逗号分隔的输入,这会更优雅一些。该 shell 非常擅长解析以空格分隔的标记。我们使用 IFS=,
来实现与驱动 for
循环的逗号分隔值列表大致相同的效果。
关于linux - 如何从输入文件中获取 'ls -lrt' 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917101/