Zonuの雑記帳。1週間に1回更新が目標です。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
最近メモ書きになってる,との指摘を受けてますが,気にせずに書きます.
シェルスクリプトで,ファイルからの読み込みを用いて,一気にデータを抽出する方法です.
awkなんかを使うと簡単にできるのかもしれませんが,awkを勉強してないのでこの方法でやってます.
今回は,ITproの記事を参考にして,こんな感じの捨てスクリプトを書きました.
cutup.sh
--
01: echo "CUT UP DATAS"
02: echo "READING file list from $1"
03:
04: BUFIFS=$IFS
05: IFS=
06:
07: exec 3< $1
08: while read FL 0<&3
09: do
10: echo $FL
11: grep '^ *2.00' $FL | sed "s/^ *2.00//" > 2.0_$FL
12: done
13: exec 3<&-
14:
15: IFS=$BUFIFS
--
スクリプトの解説です.
4行目に出てくるIFS,これはシェルスクリプトの予約変数です.
Internal Field Separaterの略で,シェルがコマンドラインを走査するときの区切り文字を定義します.
4行目では,シェルが標準で定義しているIFSをBUFIFSに保存しています.
15行目でBUFIFSをIFSに書き戻すことによって,後で実行されるスクリプトに影響がないようにしているわけです.
5行目ではIFSをNULLにしていると思われます.
これは,あとで$1に渡されたファイルの中身を読むときに,空白文字などを区切り文字として読んでもらっては困るからです.
Windowsだと良くありますよね,ファイル名に空白が入ってるものとか.
7行目.
ファイルディスクリプタに$1で指定されたファイルを渡します.
これが3なのは,0(stdin), 1(stdout), 2(stderr) は既にシェルで使用されているためのようです.
8行目.
ファイルディスクリプタに渡されたファイルから1行読み変数FLに格納します.
また,while文になっているので9~12行目を繰り返し実行,つまりファイルから読めなくなるまで繰り返します.
13行目.
7行目でオープンしたファイルディスクリプタ3を閉じます.
do~doneの中に入っている処理を変更すると,いろいろな処理が自動で実行できるようになります.
また,このプログラムに渡すファイル一覧は,
--
$ ls > dirs.txt
--
などを利用して取得することが可能です.
シェルスクリプトで,ファイルからの読み込みを用いて,一気にデータを抽出する方法です.
awkなんかを使うと簡単にできるのかもしれませんが,awkを勉強してないのでこの方法でやってます.
今回は,ITproの記事を参考にして,こんな感じの捨てスクリプトを書きました.
cutup.sh
--
01: echo "CUT UP DATAS"
02: echo "READING file list from $1"
03:
04: BUFIFS=$IFS
05: IFS=
06:
07: exec 3< $1
08: while read FL 0<&3
09: do
10: echo $FL
11: grep '^ *2.00' $FL | sed "s/^ *2.00//" > 2.0_$FL
12: done
13: exec 3<&-
14:
15: IFS=$BUFIFS
--
スクリプトの解説です.
4行目に出てくるIFS,これはシェルスクリプトの予約変数です.
Internal Field Separaterの略で,シェルがコマンドラインを走査するときの区切り文字を定義します.
4行目では,シェルが標準で定義しているIFSをBUFIFSに保存しています.
15行目でBUFIFSをIFSに書き戻すことによって,後で実行されるスクリプトに影響がないようにしているわけです.
5行目ではIFSをNULLにしていると思われます.
これは,あとで$1に渡されたファイルの中身を読むときに,空白文字などを区切り文字として読んでもらっては困るからです.
Windowsだと良くありますよね,ファイル名に空白が入ってるものとか.
7行目.
ファイルディスクリプタに$1で指定されたファイルを渡します.
これが3なのは,0(stdin), 1(stdout), 2(stderr) は既にシェルで使用されているためのようです.
8行目.
ファイルディスクリプタに渡されたファイルから1行読み変数FLに格納します.
また,while文になっているので9~12行目を繰り返し実行,つまりファイルから読めなくなるまで繰り返します.
13行目.
7行目でオープンしたファイルディスクリプタ3を閉じます.
do~doneの中に入っている処理を変更すると,いろいろな処理が自動で実行できるようになります.
また,このプログラムに渡すファイル一覧は,
--
$ ls > dirs.txt
--
などを利用して取得することが可能です.
PR
この記事にコメントする
カレンダー
05 | 2025/06 | 07 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Internal Search
Category
About
name: Zonu
mail: pico@any.xii.jp
mail: pico@any.xii.jp
某地方国立大学院生。 歯車とか電子回路とかを見るとワクワクする、いわゆるメカフェチ。( not ロボオタ )
情報系学科だったはずなのに、気づけば環境系学科に。 お蔭様で、就職活動の際は説明が大変でした。 (でもその話題をツカミにできたので結果オーライかも)解析メインの研究なので、 FortranとかC++とかをメインにPythonとかOpenGLとかも使ってます。