次の形式の *.txt という名前のテキストファイルが約 100 個あります。
=========================================================
rho_center e_center Mass Mass_0 R_e
1.0000e-03 1.1236e-03 1.5379e+00 1.6522e+00 1.0734e+01
J T/W Omega Omega_Kepler axes_ratio
0.0000e+00 0.0000e+00 0.0000e+00 3.5265e-02 1.0000e+00
J/M^2
0.0000e+00
=========================================================
yy| rhoc = 1.00000000e-03 ;
yy| rp_re = 1.00000000e+00 ;
yy| A_diff= 1.00000000e+00 ;
yy| Re = 1.07336268e+01 ;
yy| M0 = 1.65219709e+00 ;
yy| M = 1.53786062e+00 ;
yy| W = 2.10814073e-01 ;
yy| T = 0.00000000e+00 ;
yy| J = 0.00000000e+00 ;
yy| beta = 0.00000000e+00 ;
yy| M_R = 1.43275023e-01 ;
| === periods in msecs ==========
yy| Pa = inf ;
yy| Pe = inf ;
yy| td = 8.46677695e-01 ;
yy| PK = 8.77582921e-01 ;
yy| MDIV = 301 ; SDIV = 601;
次のようにテキストファイルでrhocとMの値を連結したいと思います。
rhoc M
0.001 1.537
... ...
0.004 2.328
私は初めてbashに触れ、awkを使ってこれを試しましたが失敗しました。このためにbashスクリプトをどのように書くことができますか?
ベストアンサー1
たとえば、ファイルごとに/ gawk
1つしかないとします。rhoc
M
gawk '
BEGIN {print "rhoc M"}
BEGINFILE {delete field}
$3 == "=" {field[$2] = $4}
ENDFILE {
if (("rhoc" in field) && ("M" in field))
print field["rhoc"], field["M"]
}' ./*.txt
ファイル名に基づいてアルファベット順にファイルを処理します。使用する場合は、順序が数字になるように置き換えてzsh
ください(だから./*.txt
./*.txt(n)
file2.txt
今後 file10.txt
例えば)。