特定の文字の後の数字のコピー

特定の文字の後の数字のコピー

ファイル 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

おすすめ記事