空の文字列値にリダイレクトしている間、Awk コマンドは失敗します。

空の文字列値にリダイレクトしている間、Awk コマンドは失敗します。

大容量ファイルをいくつかの部分に分割したいです。分割後のファイル名とファイルあたりのレコード数は、awkに引数/変数として与えられます。

EG:(FILENAME=A_20100レコードがあると仮定)NoOfRecordsPerFile=50 分割ファイル名は次のようになります。

A_20-1.txt
A_20-2.txt

私が使用するコマンドは次のとおりです。

awk -vNoOfRecordsPerFile -vFILENAME 'NR%NoOfRecordsPerFile==1{x=FILENAME"-"++i".txt"}{print > x}' $FILENAME

エラーが発生します。

awk: (FILENAME=A_20 FNR=1) fatal expression for `>' has null string value

私は何が間違っていましたか?

他のファイルにも同じコマンドが機能します。

ベストアンサー1

FILENAME変数を次のように組み合わせます。値(コマンドラインに値を指定しない)を使用すると、スクリプトがFILENAME実行される前にエラーが発生します。すでにawkawk持つFILENAME名前付き変数を使用できます。現在の入力ファイルの名前。

を使用すると、-vNoOfRecordsPerFileコマンドラインで変数に値を割り当てたいが、awk決して値を割り当てないと言います。これはあなたが言うものとは異なるエラーを生成します。同じ名前のシェル変数値を使用するには-v NoOfRecordsPerFile="$NoOfRecordsPerFile"

したがって、最終awkコマンドは次のようになります。

awk -v NoOfRecordsPerFile="$NoOfRecordsPerFile" '
    ((NR-1) % NoOfRecordsPerFile) == 0 { x = FILENAME "-" ++i ".txt" }
                                       { print > x                   }' "$FILENAME"

おすすめ記事