使用awk在所有子目录中读取和创建文件

时间:2015-10-10 00:47:21

标签: bash shell awk scripting subdirectory

我正在尝试解析名为" README"的所有文件。在我指定的目录下的所有子目录(和子子目录)中,并在同一目录中创建一个包含已解析输出的新文件,其中每个子目录都是#34; README"文件被发现。

something,something2,something3
nothing1,nothing2,nothing3

输出文件仅在我的工作目录中创建。我想要做的是将输出文件重定向到找到相应README的子目录。还有比这更好的方法吗?

如果有帮助,请自述文件格式:

{{1}}

1 个答案:

答案 0 :(得分:1)

鉴于您希望在找到README的目录中创建输出文件,最简单的方法是使用POSIX标准dirname 命令:

#!/bin/bash

FILES=$(find myDirectory -type f -name 'README')
for f in $FILES
do
    outputfile="$(dirname "$f")/outputfile"
    echo "parsing $f into $outputfile"

    awk -F, 'BEGIN {print "header"}
             {print $2}
             END {print "footer"}' "$f" > "$outputfile"

done

如果目录中有空格或换行符,则此代码不安全,但假设您坚持使用便携式文件名字符集(字母,数字,点,短划线和下划线),则不存在重大问题。 (在我做出任何更改之前它并不安全;它仍然不安全。因为你使用了FILES=$(find …)而不安全,而当你这样做时,几乎可以保证对于带有空格的名字不安全其中有一些方法可以解决,但是它们涉及更多的大手术。)

如果您愿意,可以学习Bash parameter expansion机制,了解如何在不使用dirname的情况下执行此操作。