大容量ファイルをいくつかの部分に分割したいです。分割後のファイル名とファイルあたりのレコード数は、awkに引数/変数として与えられます。
EG:(FILENAME=A_20
100レコードがあると仮定)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
実行される前にエラーが発生します。すでにawk
awk
持つFILENAME
名前付き変数を使用できます。現在の入力ファイルの名前。
を使用すると、-vNoOfRecordsPerFile
コマンドラインで変数に値を割り当てたいが、awk
決して値を割り当てないと言います。これはあなたが言うものとは異なるエラーを生成します。同じ名前のシェル変数値を使用するには-v NoOfRecordsPerFile="$NoOfRecordsPerFile"
。
したがって、最終awk
コマンドは次のようになります。
awk -v NoOfRecordsPerFile="$NoOfRecordsPerFile" '
((NR-1) % NoOfRecordsPerFile) == 0 { x = FILENAME "-" ++i ".txt" }
{ print > x }' "$FILENAME"