awkの出力を指定されたディレクトリ内の個々のファイルに送信することはできません。作業ディレクトリでこれを正常に実行し、mvコマンドを最後までリンクできますが、指定されたawk
ディレクトリにファイルを保存するためにのみ使用したいと思います。
ちなみに、以下はmessages.txt
別々のメッセージファイルに分割したい単純化されたものです。
messageHeader:
mh_field1: mh_val1
mh_field2: mh_val2
messageData:
md_field1: md_val1
md_field2: md_val2
messageHeader:
mh_field1: mh_val1
mh_field2: mh_val2
messageData:
md_field1: md_val1
md_field2: md_val2
messageHeader:
mh_field1: mh_val1
mh_field2: mh_val2
messageData:
md_field1: md_val1
md_field2: md_val2
以下を使用して、メッセージファイルを別々のメッセージに正常に分割し、各メッセージを作業ディレクトリの別々のファイルに出力することができました。
awk -v RS= '{print > ("message" NR ".txt")}'
作業ディレクトリにmessage1.txt
、およびを作成しますmessage2.txt
。次のmessage3.txt
ようにmv
、この基本コマンドの最後にコマンドを接続して、出力を指定されたディレクトリに移動することもできます。
out = "$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ("message" NR ".txt")}' && mv message*.txt $out
message1.txt
、およびをmessage2.txt
生成します。しかし、justの使い方はわかりません。 message3.txt
./messages
awk
たとえば、次のようにメッセージファイルを分割し、個々のメッセージを指定された出力ディレクトリに出力してみました。
out="$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ($out "message" NR ".txt")}' messages.txt
これにより、次のエラーが発生します。
awk: cmd. line:1: (FILENAME=- FNR=1) fatal: can't redirect to 'messageHeader:
mh_field1: mh_val1
mh_field2: mh_val2
messageData:
md_field1: md_val1
md_field2: md_val2message1.txt' (file name too long)
次の関連質問を見つけました。」awkを使用してファイルを分割し、別のディレクトリに結果を生成します。「しかし、まだ正しい構文を得ることはできません。
out="$(pwd)/messages"
mkdir -p $out
awk -v RS= path=$out '{f=path "message" NR ".txt"; print > f}' messages.txt
awk: fatal: cannot open file `{f=path "message" NR ".txt"; print > f}' for reading (No such file or directory)
答え1
@steeldriverのコメントによると、不足して-v
正しい構文が生成されます。
out="$(pwd)/messages"
mkdir -p $out
awk -v RS= -v path="$out" '{f=path "message" NR ".txt"; print > f}' messages.txt