あなたの運動が実際に単に別々の変数にそれぞれの行を読み込むことで処理され、例えば$a
,$b
,$c
,$d
および$e
。読んだら、別の$count.geo
ファイル(1.geo
、2.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;
ルック物事を超えるとさらにご質問がある場合は私に知らせてください。
これまでに何を試しましたか? '-r行を読んでいる間。前の '' declare -i count''と一緒にdo ... 'が動作する。 –
返信いただきありがとうございます!私はDAKOTAに付属のファイルで実際に試しましたが、私とはうまく動作しませんでした。感謝するあなたのアイデアの例を提供できるかどうか。ありがとう、 – user3780018
答えはPOSIXシェルに準拠しています。 bashのような高度なシェルを使用している場合、配列を使用するオプションがあります。どちらの場合でも 'printf'の代わりに* heredoc *を使うこともできます。 'awk'も簡単な解決法を提供します。 –