2017-07-18 2 views
0

シェルスクリプトファイルを作成して、.datファイルまたはExcel .xlsファイルから特定の値を取得して、次の例のようにこれらの値を別のファイルに渡します。シェルスクリプトを使用して別のファイルに値を渡す

1-.DAT値は、32x5のマトリクスサイズを有する;実施例を

1 3 4 5 6 
4 5 7 9 8 
: 
: 
1 1 1 2 4 

2- .geoファイルが持っている私は各行に32 GEOファイルを作成したい

x1= ; 
x2= ; 
x3= ; 
x4= ; 
x5= ; 

以下.datまたは.xlsファイル 1.geoは持っています。

x1 = 1; 
x2 = 3; 
x3 = 4; 
x4 = 5; 
x5 = 6; 

2.geo行を介して、第2行等要約

、シェル・スクリプト・ループを有しており、GEOファイルに渡すと異なるGEOファイル名で保存します。

ご協力いただければ幸いです。

多くのおかげで、

+0

これまでに何を試しましたか? '-r行を読んでいる間。前の '' declare -i count''と一緒にdo ... 'が動作する。 –

+0

返信いただきありがとうございます!私はDAKOTAに付属のファイルで実際に試しましたが、私とはうまく動作しませんでした。感謝するあなたのアイデアの例を提供できるかどうか。ありがとう、 – user3780018

+0

答えはPOSIXシェルに準拠しています。 bashのような高度なシェルを使用している場合、配列を使用するオプションがあります。どちらの場合でも 'printf'の代わりに* heredoc *を使うこともできます。 'awk'も簡単な解決法を提供します。 –

答えて

0

あなたの運動が実際に単に別々の変数にそれぞれの行を読み込むことで処理され、例えば$a,$b,$c,$dおよび$e。読んだら、別の$count.geoファイル(1.geo2.geo、など)に、printfという形式で書き込むことができます。シンプルな実装は次のようになります。

awk '{printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n", \ 
$1, $2, $3, $4, $5 > FNR".geo"}' geo.dat 

例入力ファイルgeo.dat

$ cat geo.dat 
5 9 4 4 2 
8 4 3 8 7 
5 8 4 3 7 
1 3 9 8 2 
5 8 2 2 1 
7 1 8 3 4 
3 7 4 7 2 
5 6 6 9 5 
3 4 4 8 6 
2 9 9 1 7 
2 6 5 4 8 
5 1 9 4 3 
4 6 1 7 5 
2 4 1 7 3 
6 2 6 1 9 
3 3 9 3 4 
6 5 9 2 8 
8 7 8 8 2 
1 2 9 1 1 
4 3 5 5 1 
8 2 2 5 3 
2 7 5 1 1 
9 6 5 9 8 
4 9 6 2 8 
8 3 1 7 4 
2 1 6 7 7 
7 5 9 9 9 
2 3 7 8 3 
9 8 1 5 7 
9 9 7 6 1 
6 4 5 7 2 
8 9 3 6 6 

使用例

#!/bin/sh 

dat=${1:-geo.dat} ## .dat filename ('geo.dat' default) 
count=1 

test -r "$dat" || { ## validate input file is readable 
    printf "error: file not readable '%s'\n" "$dat" 
    exit 1 
} 

while read -r a b c d e; do  ## read each value into a b c d e 
    printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n" \ 
    $a $b $c $d $e >$count.geo 
    ((count++)) 
done <"$dat" 

awkを使用して、あなたは次のようにワンライナーを使用することができます

$ sh readgoedat.sh geo.dat 

または

$ awk '{printf "x1 = %d;\nx2 = %d;\nx3 = %d;\nx4 = %d;\nx5 = %d;\n", \ 
$1, $2, $3, $4, $5 > FNR".geo"}' geo.dat 

例の出力ファイル

$ cat 1.geo 
x1 = 5; 
x2 = 9; 
x3 = 4; 
x4 = 4; 
x5 = 2; 

$ cat 2.geo 
x1 = 8; 
x2 = 4; 
x3 = 3; 
x4 = 8; 
x5 = 7; 

$ cat 32.geo 
x1 = 8; 
x2 = 9; 
x3 = 3; 
x4 = 6; 
x5 = 6; 

ルック物事を超えるとさらにご質問がある場合は私に知らせてください。

+0

ランキンさんに神様が祝福されました! 1.geo .... 32.geoに値を印刷してください。しかし、私の場合は、すべての.geoファイルを1から準備しています...32を除いて、x1、x2、x3、x4、x5を各既存のジオファイルに入れるだけです。 .geoファイルの例を次に示します。 – user3780018

+0

/* // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>> */ D = 1.02; // X1 = 0.1; // X2 = 0.06; // X3 = 0.51; // T11 = 1; // X4 = -0.02; // X5 = 1.1; // Ltは= 0; detn = 0.4; detd = 0.44; c1n = 2; c2n = 4; c3n = 5; c1d = 4; c2d = 6; c3d = 4; /* // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> (e == 30) y = 1.2e-3; // EndIf (e == 50) y = 2.1e-3; // EndIf (e == 70) y = 2.9e-3; EndIf // ポイント(1)= {-7.5 * D、10 * D、0,0}; – user3780018

+0

問題は、既存のジオファイルに値を出力するが、残りの値は削除されるという問題です。助けてくれてありがとう! – user3780018

関連する問題