请帮我这个嵌套for循环unix

时间:2014-09-18 15:38:09

标签: unix for-loop awk grep cat

for i in `ls -l`; do for j in `ls -l /abc`; do cat $j | grep $i;done;done;

我想用pcd中的文件搜索pwd中的每个文件名。请帮助我。

3 个答案:

答案 0 :(得分:0)

我想你想要:

for filename in * ; do
    grep -F -- "$filename" /abc/*
done

请注意,由于grep的性质,如果您的任何文件名包含换行符,这将无法正常工作。 (幸运的是,这种情况非常罕见;但要记住这一点。)

答案 1 :(得分:0)

如果您的密码中的文件不能在其名称中包含换行符,那么这样的方法将是正确的方法:

ls |
awk '
NR==FNR{ files[$0]; next }
{
    for (file in files) {
        if ( index($0,file) ) {
            print FILENAME, file
        }
    }
}
' - /abc/*

但是,就像你的grep方法一样,它很容易出错,因为这个文件名为""将匹配包含"然后"的行,并且如果它在目标文件中多次出现,则它会多次报告相同的匹配。如果有任何问题,请更新您的问题以显示一些示例输入和输出,以便我们为您提供帮助。

答案 2 :(得分:0)

不是一个编程问题..但是如何使用find?

find abc -type f -name $filename ..

即使上面的内容并不完全符合您的要求(对我来说有点不清楚),如果您已经有一个方法可以做到这一点,那么使用嵌套的ls是非常疯狂的。 / p>

man find如果您想了解有关find命令的更多信息。

要对您找到的文件执行更多操作,可以使用-exec标志为每个找到的文件执行某些操作。