是否有可能在awk中找到几个级别的文件

时间:2012-04-13 03:33:36

标签: awk

我是否知道有没有办法在awk中使用一个衬管命令找到某些单词的synctax,我发现的文件更深层次。想知道'找到'cmd是否可以在这里申请,但我试过找到它对我不起作用,可能我的用法是错误的。

我的命令如下所示,如果我将命令放在* .abc所在的同一级别上,它会很有效。

awk '/hdl_file/{printf "%s",  $0}/input|output/{printf "%s",  $0}' *.abc | sed s/\.aux// | sed s/,//g | sed s/input// | sed s/output// | sed s/=// | sed s/\"//g | sed s/\.ac// | sed s/hdl_file// | awk '{print $NF $0}' | awk '{$NF="";print $0}'

但是,我需要应用此命令来更深层地查找2层次结构上的* .abc文件。用find查找下面的命令,但它给出了错误。

find . -mindepth 2 | awk '/hdl_file/{printf "%s",  $0}/input|output/{printf "%s",  $0}' *.abc | sed s/\.aux// | sed s/,//g | sed s/input// | sed s/output// | sed s/=// | sed s/\"//g | sed s/\.ac// | sed s/hdl_file// | awk '{print $NF $0}' | awk '{$NF="";print $0}'

awk:不匹配。

请帮助。感谢。

2 个答案:

答案 0 :(得分:0)

我不确定这是否是你的意图,但是-mindepth会在 more 目录中进行find搜索,而不是2级。如果您想要最多 2级别的文件,则需要使用-maxdepth

如果要使用一个命令的输出(在本例中为find)作为另一个命令(awk)的参数,则可以使用xargs,例如:

find . -maxdepth 2 | xargs awk '[your awk script goes here]'

或者,如果您不关心他们的名字,可以使用-exec来阅读文件:

find . -maxdepth 2 -exec cat '{}' \; | awk '[your awk script goes here]'
# Or possibly:
find . -maxdepth 2 | xargs cat | awk '[your awk script goes here]'

另请注意,您可以避免生成多个sed实例并将它们组合在一起,这里有两种方法:

sed -e 's/foo/bar/' -e 's/something/somethingelse/'
sed -f sed_script  # sed_script is a text file with commands for sed

答案 1 :(得分:0)

您也可以使用

awk '....' */*/*.abc

如果文件正好是2个子目录。对于任意深度,最近的bash可以做

shopt -s globstar
awk '....' **/*.abc

你的awks和seds管道可以简化为

awk '
    /hdl_file/ || /input|output/ {
        gsub(/[,"]/, "")
        sub(/\.aux|\.ac|input|output|hdl_file|=/, "")
        last = $NF
        $NF = ""
        print last, $0
    }             
' *.abc