0

私が見つけているファイルがより深い階層にある1つのライナーコマンドを使用して、awkで単語の特定の同期税を見つける方法があることを知っているかもしれません。ここで「find」コマンドを適用できるかどうか疑問に思っていますが、find を試してみましたが、うまくいきません。おそらく私の使い方が間違っています。

以下のような私のコマンドは、 *.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:一致しません。

助けてください。ありがとう。

4

2 に答える 2

0

それがあなたの意図であるかどうかはわかりませんが、2レベル以上-mindepth下のディレクトリをfind検索します。最大で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の複数のインスタンスを生成してそれらを一緒にパイプすることを回避できることにも注意してください。これを行うには、次の2つの方法があります。

sed -e 's/foo/bar/' -e 's/something/somethingelse/'
sed -f sed_script  # sed_script is a text file with commands for sed
于 2012-04-13T08:14:39.803 に答える
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 
于 2012-04-13T13:17:45.700 に答える