我有一个输入文件file.csv
(用逗号分隔符分隔的数据),它只有3个以逗号分隔的行。数据将是文件名。
E.g:
test,test1,test2,test3,,n
a,b,c,d,,n
p,q,r,s,,n
现在,我要求使用命令file.csv
在目录abc
中存在或不存在第一行文件ls -lrt
数据。应将此命令的输出重定向到文本文件a.txt
。
E.g:
ls -lrt test
ls -lrt test1
....
下一步:目录file.csv
中abc
数据的第二行,命令为ls -lrt
。此命令的输出应附加到文本文件a.txt
。
E.g:
ls -lrt a
ls -lrt b
....
下一步:目录file.csv
中xyz
数据的第三行,命令为ls -lrt
。此命令的输出应附加到文本文件a.txt
。
E.g:
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
我怎样才能做到这一点?
答案 0 :(得分:1)
这样的事情可能是:
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
循环。