我是否知道有没有办法在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:不匹配。
请帮助。感谢。
答案 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