ファイル名とファイル内容から情報を抽出する

ファイル名とファイル内容から情報を抽出する

私は数字だけを含む複数のファイルを生成しました。次に、各ファイル名にこれらのファイルに関する情報が含まれます。私が望むのは、すべてのファイルの内容を新しいファイルの1つの列に収集し、各ファイル名の一部をこの新しいファイルの別々の列にすることです。

ファイル名は次のとおりです。traj-num1-iter-num2-states-num3.gradientここで、num1、num2、num3 は異なる数値です。私が望むものの例:

$ cat traj-10-iter-220-states-01.gradient
-0.0014868599999999788

$ cat newfile
traj    iter     states    gradient
10      220      01        -0.0014868599999999788

これは可能だと思いますが、方法がわかりません。

ベストアンサー1

AWKFILENAME変数の使用:

awk 'BEGIN { OFS = "\t"; print "traj", "iter", "states", "gradient"; FS="-|\\." } { gradient=$0; $0=FILENAME; print $2, $4, $6, gradient }' traj-*-iter-*-states-*.gradient

要求のヘッダー行が出力されると、各ファイルがtraj-*-iter-*-states-*.gradient処理され、ファイル名とその内容から抽出された値が出力されます。

次のバリアントは次のものに基づいています。提案渡すオリヴィエ・デュラク、ファイル名からヘッダー行を抽出し、より単純なバージョンを使用してくださいFS

awk 'BEGIN { OFS = "\t"; FS="[-.]" } { contents=$0; $0=FILENAME; if (!header) { print $1, $3, $5, $7; header=1 }; print $2, $4, $6, contents }' traj-*-iter-*-states-*.gradient

目的のファイルと一致するように最後にglobを変更することができ、ヘッダーが調整されます(処理された最初のファイルに合わせて調整されます)。

おすすめ記事