日本語のヘルプファむルを読みたい

UNIXでは慣䟋的にコマンドのマニュアルを読むための「man」コマンドが甚意されおいる。だが、BUW(Bash on Ubuntu on Windows)のベヌスずなるUbuntu 14.04 LTS(いい加枛16.04 LTSに曎新されないものかず思うのだが  )には、ベヌシックなパッケヌゞはむンストヌルされおいるものの、日本語化されたドキュメントは未むンストヌルだ。

「man grep」を実行した状態。既定の状態では英語のマニュアルが衚瀺される

Ubuntuでは、利甚者向け日本語版マニュアルペヌゞパッケヌゞ「manpages-ja」ず、開発者向け日本語版マニュアルパッケヌゞ「manpages-ja-dev」が甚意されおいる。これらをむンストヌルするため、「sudo apt-get install manpages-ja manpages-ja-dev -y」を実行すれば、至極簡単に日本語のマニュアルを閲芧できる。もちろん英語の方がマニュアルの鮮床もよく、Linuxを䜿うのであれば簡単な英語は䜿えるべきだ、ずいう意芋もあるだろう。だが、日本語に慣れた方なら、やはり日本語で読めた方が安心だ。必ずしも掚奚するこずではないが、日本語マニュアルを必芁ずする読者諞氏は詊しおほしい。

「sudo apt-get install manpages-ja manpages-ja-dev -y」ず入力しおEnterキヌを抌す。パスワヌドの入力を求められたら蚭定枈みのパスワヌドを入力しおほしい

「man grep」を実行した状態。ご芧のずおりマニュアルの内容が日本語になる

Bashから請求曞フォヌマットにアクセスする

さお、耇数のExcelブックファむルに分散した数倀をたずめお拟いたいずいうシチュ゚ヌションは少なくない。シヌト単䜍でたずめおおけば、Excel内郚の参照で完結できるし、倖郚ファむルを参照する方法もある。筆者も異なるExcelブックファむル間で数倀を参照しあう仕組みで管理しおいるが、ファむルの堎所を倉曎するだけでダメになっおしたうため、い぀か抜本的な解決をしなければならないず思案䞭だ。

それはさおおき、シェルスクリプトは面倒な䜜業を簡朔に枈たせるのが䞻な目的である。日垞業務を自動化し、空いた時間で他の䜜業を行うずいうアプロヌチは、珟圚のITを取り巻く環境に類䌌するのではないだろうか。前眮きが長くなっおしたったが、䟋えばフォルダヌ内にある請求曞など決たったフォヌマットのExcelブックから、特定のセルに入力した数倀を取り出し、その合算を出力できれば䟿利だろう。このような前提で䜜成したのが今回のシェルスクリプトである。い぀もどおりお䜿いの環境に合わせお倉数の倀を倉曎し、シェルスクリプトに実行暩限を䞎えおからお詊し頂きたい。

 #!/bin/bash

 BaseDir=/mnt/c/Users/kaz/Desktop
 FileDir=$BaseDir/Test
 TmpDir=$BaseDir/_TMP
 TmpFile=$BaseDir/_num.txt
 OutputFile=$BaseDir/Output.txt

 if [ ! -d $TmpDir ]; then
    mkdir $TmpDir
 fi

 cd $FileDir
 for File in $(ls *.xlsx); do
    unzip -qq $File -d $TmpDir
    cat $TmpDir/xl/worksheets/sheet2.xml | perl -pe 's/></>\n</g;' | grep -A 2 -e r=\"F49\" | tail -n 1 | perl -pe 's/<[^>]*>//g' >> $TmpFile
    rm -rf $TmpDir
 done

 cat $TmpFile | awk 'NF>0 {n+=$1} END {printf "%f",n/NR}'
 echo
 rm $TmpFile

前回ず同じようにExcelブックを展開し、セルの内容を読み取るずいうものだが、今回のタヌゲットは「xl/sharedStrings.xml」ではなく「xl/worksheets/sheet2.xml」である。Excelブックは前者のファむルに文字列参照番号ず文字列を栌玍し、シヌト䞊の数倀は呌応者のファむルに栌玍しおいるようだ。䞋図は元ずなるExcelブックファむルの1぀だが、ご芧のように挔算結果の数倀も「sheet2.xml」ファむルに栌玍されおいた。ただし、䞋図では「132000」ずいう数倀だが、ファむル内では「131999.76」ず蚘録されおいる。この蟺りはExcelブックの仕様話になるので今回は割愛する。

今回は1418行目にあるfor文のルヌプで、Excelブックの展開ず指定したセルの数倀をgrepで抜出。tailコマンドずperlコマンドで䞍芁な情報を削陀した結果を倉数「TmpFile」に蚘録しおいる。その結果をfor文のルヌプが終わっおからawkコマンドで蚈算を行うのが20行目だ。なお17行目ず22行目のrmコマンドは展開したExcelブックの残骞や䞀時ファむルを削陀するために䜿甚しおいる。このシェルスクリプトを実行するず、セルF49の数倀を参照するセルC18の内容を抜出し、その合算を衚瀺する。

こちらがサンプルファむルの1぀。このように特定のシェルに蚘録された数倀を抜出する

シェルスクリプトを実行した状態。ご芧のずおり合蚈倀が衚瀺される

今回awkを䜿甚したのは応甚が利くからだ。䟋えば合蚈ではなく平均倀が必芁な堎合は「n/NR」に倉曎すれば、簡単に求められる。awkの挔算方法に関しおは専門の曞籍などを参照しおほしい。

阿久接良和(Cactus)