どせいたんさき。

ナスダヨー

sed を用いて iraf の phot の結果を 1 行に整形したい

目的

irafphot タスクで測光をした結果は以下のようなフォーマットで出力される.

#N IMAGE               XINIT     YINIT     ID    COORDS                 LID    \
#U imagename           pixels    pixels    ##    filename               ##     \
#F %-23s               %-10.3f   %-10.3f   %-6d  %-23s                  %-6d    
#
#N XCENTER    YCENTER    XSHIFT  YSHIFT  XERR    YERR            CIER CERROR   \
#U pixels     pixels     pixels  pixels  pixels  pixels          ##   cerrors  \
#F %-14.3f    %-11.3f    %-8.3f  %-8.3f  %-8.3f  %-15.3f         %-5d %-9s      
#
#N MSKY           STDEV          SSKEW          NSKY   NSREJ     SIER SERROR   \
#U counts         counts         counts         npix   npix      ##   serrors  \
#F %-18.7g        %-15.7g        %-15.7g        %-7d   %-9d      %-5d %-9s      
#
#N ITIME          XAIRMASS       IFILTER                OTIME                  \
#U timeunit       number         name                   timeunit               \
#F %-18.7g        %-15.7g        %-23s                  %-23s                   
#
#N RAPERT   SUM           AREA       FLUX          MAG    MERR   PIER PERROR   \
#U scale    counts        pixels     counts        mag    mag    ##   perrors  \
#F %-12.2f  %-14.7g       %-11.7g    %-14.7g       %-7.3f %-6.3f %-5d %-9s      
#
homu.fits              10675.001 3394.378  1     object_homu.coo        1      \
   10673.582  3394.391   -1.419  0.013   0.382   0.384          107  BigShift  \
   0.02365567     0.2115239      -0.1010995     939    7        0    NoError   \
   1.             INDEF          INDEF                  INDEF                  \
   1.00     1.040654      3.222463   0.9644245     25.039 1.186 0    NoError    
... (以下略) ...

後半の 5 行が 1 天体分の測光結果に対応する. iraf で処理する分には問題ないのだけど awk でデータを扱ったりしたい場合には 1 天体が 1 行におさまっていて欲しい.いちいち手で変形したくないので自動化したい.

解決方法

sed を利用して整形する.コマンドは以下の通り.

sed -n '/^#/d {N;N;N;N;s/\\\n//g;p}' homu.fits.mag.1

ブレースは要らないが見やすさのためにつけた.以下のようにしてテキストを整形している.

/^*/d        # コメント行を削除

{ # コメントではない部分は以下で処理される
 N;N;N;N;    # 5 行分一気に読み込む
 s/\\\n//g;  # \+改行文字を削除
 p           # 1 行分出力→次の天体へ
}

結果

1 天体のデータが 1 行で出力された.