awkはfind execdirを使用してタブ区切りの列を印刷します。

awkはfind execdirを使用してタブ区切りの列を印刷します。

タブで区切られた列を印刷しようとしています。

まずfind、コマンドを使用して処理するファイルのリストを識別します。

第二に、ファイルパスを解析することによってsplit

第三に、指定されたタブで区切られた形式を使用して、必要ないくつかの列(下線付きの複数の列の組み合わせである最初の列を含む)を印刷します-v OFS='\t'

第四に、出力パスを印刷します_step3

INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +

次のエラーメッセージが表示されます。何が間違っていますか?

awk: syntax error at source line 1
 context is
     >>>  <<< 
awk: bailing out at source line 1

更新 - 各変数に-vを追加すると、@glennjackmanの提案に基づいて異なるエラーメッセージが表示されます。

INPUT="/Users/dir/in"
OUTPUT="/Users/dir/out/"
find "$INPUT" -type f -iname "*.txt_cap.txt" -execdir awk -v OFS='\t' -v var="$OUTPUT" '{n = split(FILENAME,p,"/"); print ($1"_"$2"_"$4"_"$3, $2, $5, $6, $7) >> (var p[n] "_step3")}' {} +

次のエラーメッセージが表示されます。

awk: can't open file MAP_pv1.txt_cap.txt
 source line number 1

追加の質問としてを使用すると、find "$INPUT" -type f -iname "*.txt_cap.txt"端末に表示されているファイルのリストを表示できます。を使用すると表示されるファイルも表示できます"$INPUT" -type f -iname "*.txt_cap.txt"。ただし、ファイル一致パターンが長い最初の awk と一緒に使用すると、コマンドに関するエラーメッセージが表示されますが、一致パターン.txtとしてのみ使用するとエラーメッセージはなく、出力ファイルは生成されません。静かな行動の理由を知っている人はいますか?

ありがとうございます。

ベストアンサー1

おすすめ記事