Bash でターミナル上のデータ値を CSV ファイルにエクスポートする方法

Bash でターミナル上のデータ値を CSV ファイルにエクスポートする方法

ターミナルで生成されたデータ値をCSVファイルにエクスポートしたいのですが、以下はFreesurferで命令を実行した後に得られる出力です。

dev@dev-OptiPlex-780:~$ mri_segstats --subject Sub1 --etiv-only

    $Id: mri_segstats.c,v 1.75.2.9 2013/02/16 00:09:33 greve Exp $
    cwd 
    cmdline mri_segstats --subject Sub1 --etiv-only 
    sysname  Linux
    hostname dev-OptiPlex-780
    machine  x86_64
    user     dev
    UseRobust  0
    atlas_icv (eTIV) = 1144730 mm^3    (det: 1.701803 )

上記の出力から、bash スクリプトを使用して csv ファイル内の atlas_ICV(eTIV) の値 (つまり 1144730 mm^3) のみを抽出したいと思います。ご提案があれば、ぜひお知らせください。

私は自分のディレクトリにある10件の件名のICV値を抽出する自動コードを作成しました。

    for ICV in `cat list_subjects.txt`;do

    #mri_segstats --subject $ICV --etiv-only

   ICV_Calculation=mri_segstats --subject $ICV --etiv-only | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'

    echo "${Subjects_ICV},${ICV_Calculation}" >>Subjects_ICV.csv

    done

list_subjects.txtには、ディレクトリにあるすべての件名が含まれています。

答え1

atlas_ICV (eTIV)(つまり = 1144730 mm^3)の値のみを抽出したい。

次のファイルがあるとします:

: mri_segstats.c,v 1.75.2.9 2013/02/16 00:09:33 greve Exp $
cwd 
cmdline mri_segstats --subject Sub1 --etiv-only 
sysname  Linux
hostname dev-OptiPlex-780
machine  x86_64
user     dev
UseRobust  0
atlas_icv (eTIV) = 1144730 mm^3    (det: 1.701803 )

これを使えますsed:

sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p' atlas
1144730 mm^3

出力からその値を抽出する場合はSTDOUT、次のようにパイプを使用します。

cat atlas | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'
1144730 mm^3

あなたの場合は次のようになると思います:

mri_segstats --subject Sub1 --etiv-only | sed -n 's/.*(eTIV) = \([0-9].*mm^3\).*/\1/p'

sed --version
sed (GNU sed) 4.2.2

関連情報