「awkでデータ抽出」の編集履歴(バックアップ)一覧はこちら
「awkでデータ抽出」(2009/02/10 (火) 15:44:55) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
<h3>awkでデータを抽出</h3>
<p>awkというのはテキストデータを処理するためのプログラムで、<br />
データを並べ替えたり、抽出する時に役立ちます。<br />
今回はawkを使って、調査データから必要な情報を抽出してみます。<br /><br />
今回は<a target="_blank" href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=dummy_density.txt">こちらのデータ</a>を使用します。以下のファイルをダウンロードし、<br />
GMT作業用ファルダに保存してください。<br /><a target="_blank" href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=dummy_density.txt">
dummy_density.txt</a><br />
これは乱数で作ったデータなので数値に意味はありません。<br />
別な海域で試したい人はこちらを使って自分でデータセットを作ってみてください。<br /><a target="_blank" href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=%E6%9E%B6%E7%A9%BA%E3%81%AE%E8%AA%BF%E6%9F%BB%E7%B5%90%E6%9E%9C.xls">
架空の調査結果.xls</a><br /><br /><br />
今回使用するdummy_density.txtは<br />
No. 月 日 経度 緯度 水深 水温 密度<br />
というデータが記録されています。<br />
まず、ここから水深0mの表層水温を抽出し、GMTで使用できるデータの形にします。<br />
以下のコマンドです。<br />
ここからダウンロードできます。<br />
-----------------------------------------<br /><span style="background-color:rgb(255,255,153);">region=144/147/39/42</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">data=dummy_density.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">extract_data=extract_sst.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">grd_file=extract_sst.grd</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">awk '($6==0){print
$5,$4,$7}' $data > $extract_data</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">surface $extract_data
-G$grd_file -I1m -R$region -T0.2</span><br />
-----------------------------------------<br />
awkは上のように、<br /><strong>awk 'コマンド' ’データファイル’ > 出力先</strong><br />
という形で使用します。<br />
5行目のawkは<br />
データファイル<span style="background-color:rgb(255,255,255);">の6列目(水深)が、0である場合に($6==0)、</span><br />
5列目(経度)、4列目(緯度)、7列目(水温)の順番で<br /><span style="background-color:rgb(255,255,255);">extract_sst.txt</span>というテキストファイルに記録するというコマンドになっています。<br />
6行目で、<span style="background-color:rgb(255,255,255);">extract_sst.txtという水温と緯度経度のデータファイルを<br />
GMTで扱うために、extract_sst.grdというGRDファイルに変換しています。</span><br /><br /><span style="background-color:rgb(255,255,255);">5行目の$6==0の部分を書き換えると、</span>他にもいろいろと抽出できます。<br /><strong>例1 水深200mより浅い調査点とその水温を抽出</strong><br /><span style="background-color:rgb(255,255,153);">awk '($6<200){print
$5,$4,$7}' $data > $extract_data</span><br /><strong>例2 水深200mより浅く、水温が5℃以上の</strong><strong>調査点とその水温</strong><strong>を抽出<br /></strong><span style="background-color:rgb(255,255,153);">awk
'($6<200 && $7>5 ){print $5,$4,$7}' $data >
$extract_data</span><br /><strong>例3 8月に行われた調査の</strong><strong>調査点、水温</strong><strong>、密度を抽出<br /></strong><span style="background-color:rgb(255,255,153);">awk
'($2==8 ){print $5,$4,$7,</span><span style="background-color:rgb(255,255,153);">$8</span><span style="background-color:rgb(255,255,153);">}' $data > $extract_data</span><br /><span style="background-color:rgb(255,255,255);">このようにさまざまな条件を設定し、テキストデータを抽出することが可能になります。<br />
膨大なデータからデータ抽出が必要な時はこのawkが便利です。<br /><br /></span></p>
<h3>パイプ( | )</h3>
<p><a href="http://www19.atwiki.jp/suisan/pages/35.html">少し前</a>でも触れましたが、<br />
上のコマンドはパイプを使うと以下のように書き換えられます。<br />
-----------------------------------------<br /><span style="background-color:rgb(255,255,153);">region=144/147/39/42</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">data=dummy_density.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">extract_data=extract_sst.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">grd_file=extract_sst.grd</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">awk '($6==0){print
$5,$4,$7}' $data | surface -G$grd_file -I1m -R$region -T0.2</span><br />
-----------------------------------------<br />
パイプはUNIXで使われる手法の1つで<br />
複数のコマンドをまとめて使う時に使用します。<br />
ここではawkで抽出されたデータ<span style="background-color:rgb(255,255,255);">(extract_sst.txtの部分)を保存(出力)せずに、<br />
直接surfaceコマンドに渡しています。<br />
大きなプログラムを作る時は、パイプを使ったほうが処理が速いのでお勧めです。</span></p>
<h3>awkでデータを抽出</h3>
<p>awkというのはテキストデータを処理するためのプログラムで、<br />
データを並べ替えたり、抽出する時に役立ちます。<br />
今回はawkを使って、調査データから必要な情報を抽出してみます。<br /><br />
今回は<a href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=dummy_density.txt" target="_blank">こちらのデータ</a>を使用します。以下のファイルをダウンロードし、<br />
GMT作業用ファルダに保存してください。<br /><a href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=dummy_density.txt" target="_blank">dummy_density.txt</a><br />
これは乱数で作ったデータなので数値に意味はありません。<br />
別な海域で試したい人はこちらを使って自分でデータセットを作ってみてください。<br /><a href="http://www19.atwiki.jp/suisan?cmd=upload&act=open&pageid=39&file=%E6%9E%B6%E7%A9%BA%E3%81%AE%E8%AA%BF%E6%9F%BB%E7%B5%90%E6%9E%9C.xls" target="_blank">架空の調査結果.xls</a><br /><br /><br />
今回使用するdummy_density.txtは<br />
No. 月 日 経度 緯度 水深 水温 密度<br />
というデータが記録されています。<br />
まず、ここから水深0mの表層水温を抽出し、GMTで使用できるデータの形にします。<br />
以下のコマンドです。<br />
ここからダウンロードできます。<br />
-----------------------------------------<br /><span style="background-color:rgb(255,255,153);">region=144/147/39/42</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">data=dummy_density.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">extract_data=extract_sst.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">grd_file=extract_sst.grd</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">awk '($6==0){print
$5,$4,$7}' $data > $extract_data</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">surface $extract_data
-G$grd_file -I1m -R$region -T0.2</span><br />
-----------------------------------------<br />
awkは上のように、<br /><strong>awk 'コマンド' ’データファイル’ > 出力先(保存するファイル名)</strong><br />
という形で使用します。<br />
5行目のawkは<br />
データファイル<span style="background-color:rgb(255,255,255);">の6列目(水深)が、0である場合に($6==0)、</span><br />
5列目(経度)、4列目(緯度)、7列目(水温)の順番で<br /><span style="background-color:rgb(255,255,255);">extract_sst.txt</span>というテキストファイルに記録するというコマンドになっています。<br />
6行目で、<span style="background-color:rgb(255,255,255);">extract_sst.txtという水温と緯度経度のデータファイルを<br />
GMTで扱うために、extract_sst.grdというGRDファイルに変換しています。</span><br /><br /><span style="background-color:rgb(255,255,255);">5行目の$6==0の部分を書き換えると、</span>他にもいろいろと抽出できます。<br /><strong>例1 水深200mより浅い調査点とその水温を抽出</strong><br /><span style="background-color:rgb(255,255,153);">awk '($6<200){print
$5,$4,$7}' $data > $extract_data</span><br /><strong>例2 水深200mより浅く、水温が5℃以上の</strong><strong>調査点とその水温</strong><strong>を抽出<br /></strong><span style="background-color:rgb(255,255,153);">awk
'($6<200 && $7>5 ){print $5,$4,$7}' $data >
$extract_data</span><br /><strong>例3 8月に行われた調査の</strong><strong>調査点、水温</strong><strong>、密度を抽出<br /></strong><span style="background-color:rgb(255,255,153);">awk
'($2==8 ){print $5,$4,$7,</span><span style="background-color:rgb(255,255,153);">$8</span><span style="background-color:rgb(255,255,153);">}' $data > $extract_data</span><br /><span style="background-color:rgb(255,255,255);">このようにさまざまな条件を設定し、テキストデータを抽出することが可能になります。<br />
膨大なデータからデータ抽出が必要な時はこのawkが便利です。<br /><br /></span></p>
<h3>パイプ( | )</h3>
<p><a href="http://www19.atwiki.jp/suisan/pages/35.html">少し前</a>でも触れましたが、<br />
上のコマンドはパイプを使うと以下のように書き換えられます。<br />
-----------------------------------------<br /><span style="background-color:rgb(255,255,153);">region=144/147/39/42</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">data=dummy_density.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">extract_data=extract_sst.txt</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">grd_file=extract_sst.grd</span><br style="background-color:rgb(255,255,153);" /><span style="background-color:rgb(255,255,153);">awk '($6==0){print
$5,$4,$7}' $data | surface -G$grd_file -I1m -R$region -T0.2</span><br />
-----------------------------------------<br />
パイプはUNIXで使われる手法の1つで<br />
複数のコマンドをまとめて使う時に使用します。<br />
ここではawkで抽出されたデータ<span style="background-color:rgb(255,255,255);">(extract_sst.txtの部分)を保存(出力)せずに、<br />
直接surfaceコマンドに渡しています。<br />
大きなプログラムを作る時は、パイプを使ったほうが処理が速いのでお勧めです。</span></p>