複数の場所の情報を含むテキストファイルがあります。ファイルの各新しいセクションにはタイトルがあります。 1つのタイトルにすべての情報を含め、タイトルを削除して別のファイルに移動しようとします。すべての部分は、ヘッダー情報に基づいて別々のファイルに移動されます。私はaixで実行されているkshを使ってシェルスクリプトでこれをプログラムしています。
awk '/FILE-HDRPQ/{x=substr ($0,11,6)}NR>1{print $0 > $TRANSDIR"/"x"_prchgrpt.txt";}' $TRANSDIR/$prcfile
FILE-HDRPQ はヘッダーの最初の部分です。 $0 には、このヘッダーから次のヘッダーの前の行までのすべての列が含まれます。 x = $0(先頭ヘッダー行を除く)がダンプされるファイル名を生成するために使用されるヘッダーの識別番号。
$TRANSDIR変数と$ prcfile変数は、ファイル名を指定して正しいディレクトリに配置するのに役立ちます。これらの変数はスクリプトの前半で呼び出されます。
私は今得る
awk: 0602-562 $() フィールドが無効です。
スクリプトを実行するとき。私は一生の間に何が間違っているのかを理解することはできません。一重引用符と二重引用符を試してみました。
答え1
アッ常にフィールド値として解釈しようとしています$<something>
(例:$0
- 全レコード、$3
- 3番目のフィールド、$NF
- 最後のフィールド値)
変数を介してディレクトリ名を渡します。
awk -v dir="$TRANSDIR" '/FILE-HDRPQ/{x=substr ($0,11,6)}
NR>1{print $0 > dir"/"x"_prchgrpt.txt";}' "$TRANSDIR/$prcfile"
答え2
次のようにTRANSDIR変数をawkに明示的に渡す必要があります。
awk -v TRANSDIR="$TRANSDIR"
次に、次のように使用します。
print $0 > TRANSDIR
awkスクリプト内で。