ファイル 1 には以下が含まれます。
SS1 2.979621e-01 3.022140e-02 4.273952e-05 0.107 0.223
Set 1: err.est. 7.72199e-05 a 1 tau1 0.0816095 tau2 98.7691
私が欲しい:
SS1
行1の後の数字を2.979621e-01
新しい行にコピーします。file2
- 次に、行2の後の数字を
err.est.
新しい行file3
にコピーします。 - 最後に、2行目以降の数字を
tau1
新しい行にコピーしますfile4
。
特定の文字の後のすべての文字をコピーする方法を知っています。たとえば、次のようになります。
grep "SS1" file1 | sed 's/*^. //' > file2
ただし、このコマンドは行全体をコピーします。
sed
特定の数の文字だけをコピーするようにコマンドに話す方法はありますか?
ベストアンサー1
次のことができます。
awk '{for (i = 1; i < NF; i++) if ($i ~ /^[[:alpha:]]/) f[$i] = $(i+1)}
END {
print f["SS1"] > "file2"
print f["err.est."] > "file3"
print f["tau1"] > "file4"
}' < file1
これにより、sed
次のことができます。
sed -n '
h; /^\(.*[[:space:]]\)\{0,1\}SS1[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$/ {
s//\2/
w file2
}
g; /^\(.*[[:space:]]\)\{0,1\}err\.est\.[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$/ {
s//\2/
w file3
}
g; /^\(.*[[:space:]]\)\{0,1\}tau1[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$/ {
s//\2/
w file4
}' < file1