ファイルの中身を特定の行間隔で別のファイルに出力するスクリプトを作成したいと考えております。
Databaseというファイルの中身を1行目から5行目をData_1というファイルに、6行目から10行目をData_2というファイルに順次、データを格納していきたいです。
そこで、以下のようなスクリプトを作成しました。
html
1#!/bin/sh 2 3Shift=0.6853347113 4 5echo "Database"; head Database 6 7for i in `seq 1 5 40` 8do 9 i_f=`expr $i + 4` 10 Data="Data_$i" 11 echo $Data $i $i_f 12 13 cat Database | awk -v foo=$Shift 'NR >= $i && NR <= $i_f {print $1-foo, $2, $3}' > $Data 14 15done 16 17cat Database | awk -v foo=$Shift 'NR >= 1 && NR <= 5 {print $1-foo, $2, $3}' > Opt.temp_1 18cat Database | awk -v foo=$Shift 'NR >= 6 && NR <= 10 {print $1-foo, $2, $3}' > Opt.temp_2 19 20echo "Opt.temp_1"; cat Opt.temp_1 21 22echo "Opt.temp_2"; cat Opt.temp_2 23 24
しかしながら、このスクリプトを実行したところ、Data_1やData_2には結果が出力されていませんでした。念のため、記載した一番下の2行のコードではきちんとファイルが出力されていました。
awkの部分のNRの記載方法が誤っているのかと思いますが、どのように記載すれば適切な結果が得られるのかが色々と調べてみたのですが、分かりません。
ぜひ、どなたか解決方法をご教授いただけますと幸いです。
また、以下が実行結果になります。
html
1$ ./Test.sh 2Database 3-0.149805 50.0000 11.24237579 4-0.149805 100.0000 11.24097601 5-0.149805 150.0000 11.24148530 6-0.149805 200.0000 11.24359005 7-0.149805 250.0000 11.24734614 8-0.149805 300.0000 11.25267809 9-0.149805 350.0000 11.25934993 10-0.149805 400.0000 11.26705581 11-0.149805 450.0000 11.27548189 12-0.149805 500.0000 11.28433724 13Data_1 1 5 14Data_6 6 10 15Data_11 11 15 16Data_16 16 20 17Data_21 21 25 18Data_26 26 30 19Data_31 31 35 20Data_36 36 40 21Opt.temp_1 22-0.83514 50.0000 11.24237579 23-0.83514 100.0000 11.24097601 24-0.83514 150.0000 11.24148530 25-0.83514 200.0000 11.24359005 26-0.83514 250.0000 11.24734614 27Opt.temp_2 28-0.83514 300.0000 11.25267809 29-0.83514 350.0000 11.25934993 30-0.83514 400.0000 11.26705581 31-0.83514 450.0000 11.27548189 32-0.83514 500.0000 11.28433724 33
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。