計算科学に必要なShellによるテキストファイル編集2
前に書いた、「計算科学に必要なShellによるテキストファイル編集」の続編です。
計算科学で求めた最適化構造は、慣例に従ってSupporting Informationファイルの末尾に乗せることが多いです。
Outputファイルの座標は、下記のような形で出てくることと思います。
これをこのまま貼り付けても良いのですが、空白が多く不格好です。私は、できるだけ間を詰め、フォントサイズを落とし、2カラム表記にすることで大体の構造情報は、一分子1ページになるようにしています。
この際に、数字と数字の間には、見栄えを良くするために無数のスペースが入っていたり、余分な空行があったり、体裁を整えるのが面倒です。カンマ切りのcsvに変換できたら、excelなんかでも扱えるファイルになります。
そのための処理を、今回まとめました。
_______
扱うファイル名を、「AAAA」とします
まず、ファイルが置かれているディレクトリまで移動し、以下のコマンドを打ってみてください。
cat -e AAAA.txt | head -n 20
自分のファイルをcat コマンドで、ターミナルに表示させています。
-e オプションで、改行の部分に隠れている記号を表示させています。
(以下の画像ファイルの「$」マークが改行コードです。)
余分なスペースを、ふっとばしたいと思います。
以下の様に、sed コマンドを使いましょう。
sed -i ".bak" -E "s/ +/,/g" AAAA.txt
-i で、バックアップファイルの拡張子を指定します。
これを入れておかないとうまく行かなかったりします。
-E で、正規表現つかうぞ!と宣言しています。
"" の中身の操作をおこないますが、
s/ X / Y /g なので、XをYで全て置換、という意味です。
Xの部分に、 / +/ ([スペース] と、[プラス記号])が入っていますが、
プラス記号は正規表現で、「その前にあるものが繰り返し一つ以上」、という意味です。
ここではスペースが入っているので、スペースが一つ以上入っていれば、
その部分が参照されます。
Yの部分は、 何も入っていないので、"消せ"という指示になります。そうすると、冒頭に示したファイルは以下のような感じになると思います。
もし、空行がいっぱい入っている場合は以下のコマンドを使ってみましょう。
sed -i "bak" -E "/^$/d" AAAA.txt
今度のコマンドでは、/ X /d なので、これとマッチする行をすっとばせ、という指示です。
"^$"によって、行頭に、行末が来ているものを探せ、という指示を出しています。
いい感じに時間を節約してください。
おためしあれ!
計算科学で求めた最適化構造は、慣例に従ってSupporting Informationファイルの末尾に乗せることが多いです。
Outputファイルの座標は、下記のような形で出てくることと思います。
これをこのまま貼り付けても良いのですが、空白が多く不格好です。私は、できるだけ間を詰め、フォントサイズを落とし、2カラム表記にすることで大体の構造情報は、一分子1ページになるようにしています。
この際に、数字と数字の間には、見栄えを良くするために無数のスペースが入っていたり、余分な空行があったり、体裁を整えるのが面倒です。カンマ切りのcsvに変換できたら、excelなんかでも扱えるファイルになります。
そのための処理を、今回まとめました。
_______
扱うファイル名を、「AAAA」とします
まず、ファイルが置かれているディレクトリまで移動し、以下のコマンドを打ってみてください。
cat -e AAAA.txt | head -n 20
自分のファイルをcat コマンドで、ターミナルに表示させています。
-e オプションで、改行の部分に隠れている記号を表示させています。
(以下の画像ファイルの「$」マークが改行コードです。)
余分なスペースを、ふっとばしたいと思います。
以下の様に、sed コマンドを使いましょう。
sed -i ".bak" -E "s/ +/,/g" AAAA.txt
-i で、バックアップファイルの拡張子を指定します。
これを入れておかないとうまく行かなかったりします。
-E で、正規表現つかうぞ!と宣言しています。
"" の中身の操作をおこないますが、
s/ X / Y /g なので、XをYで全て置換、という意味です。
Xの部分に、 / +/ ([スペース] と、[プラス記号])が入っていますが、
プラス記号は正規表現で、「その前にあるものが繰り返し一つ以上」、という意味です。
ここではスペースが入っているので、スペースが一つ以上入っていれば、
その部分が参照されます。
Yの部分は、 何も入っていないので、"消せ"という指示になります。そうすると、冒頭に示したファイルは以下のような感じになると思います。
むむむ、一番前にある、カンマがうざいです。
このまま読み込んでやって、先頭列を消すくらいなんのことはないのですが、
せっかくなので、Shellでやりましょう。
sed -i ".bak" -E "s/^,//g" AAAA.txt
今度は、X の部分に、/^,/ が入っています。
これ(^)は、正規表現では行頭を意味します。
つまり、行頭のカンマをすっとばせという指示になります。
で、以下のようにスッキリします。
.bak の部分に、.csv と入れておくと、勝手にcsvになるので、
その後にエクセルなどで作業がある場合は活用できますね。
もし、空行がいっぱい入っている場合は以下のコマンドを使ってみましょう。
sed -i "bak" -E "/^$/d" AAAA.txt
今度のコマンドでは、/ X /d なので、これとマッチする行をすっとばせ、という指示です。
"^$"によって、行頭に、行末が来ているものを探せ、という指示を出しています。
いい感じに時間を節約してください。
おためしあれ!
コメント
コメントを投稿