2018/04/01 ブログのテーマをcocoonに変更しました。
スポンサーリンク

シェルスクリプトでWordの文章を扱う技術

スポンサーリンク

どうも、パソコンインストラクターのアルバイトをしているオーカワです。

 

アルバイトでWord, Excelなどを教えていますが、基本的にWord,Excelが嫌いです。理由はいろいろありますが、一番は効率が悪いと思ってしまう所でしょうね。

勿論、教えている位なので、Excel,Wordには相当自信があります。

 


オーカワ
特にExcel方眼紙が嫌い

ExcelやWordなどで扱わなくてもいいものを、扱っている印象がありますね。


オーカワ
テキストファイルでいいじゃん...

 

なぜシェルスクリプトで扱うのか?

僕がシェルスクリプトをよく使っているのが1番の理由です。

 

Wordが入っていないパソコンでもWordファイルを扱う事が出来るので重宝しています。

Wordが入っていても、立ち上げるのに1秒位かかるのが嫌で、基本使わないです(笑)

立ち上げに1秒もかかるなんて、ストレスマッハです。

 

WordにもWord VBAという便利なツールもあります。

僕はバイト柄使う事もありますが、好きではないですねー。少し使い勝手が悪い気もします。(勉強不足)

Wordファイルの中身

Wordのdocxファイルはzip圧縮されたXMLです。(有名かな?)

 

例えば、こんな感じの中身の

test.docx

test.docxというファイルを解凍した時はこんな感じです。

test.docxの中身

ちなみに、この中のdocument.xmlの中身はこんな感じです。

文字だらけでYABAI

たったあれだけの文章なのに、こんなにもデータがあるんです。いろいろ設定が書いてあります。

今回はこのdocument.xmlファイルを扱います。

document.xmlから文章だけを抜き出してテキストファイルを作成する

例えば、test.docxの中身を知りたい時はこんな感じで取り出します。

*gsedはMac限定です。GNU sedを使いますので......。

*Ubuntuなどはsedでお願いします。

unzip -p test.docx word/document.xml | xmllint --format - | grep -E "<w:(t|pPr)>" | gsed 's/<\/\?w:t>//g' | gsed 's;<w:pPr>;;' | awk 'NF==0{print "@@@"}{print}' | xargs | gsed 's/@@*/\n/g' | awk 'NF' | tr -d ' '

基本的にこのシェル芸で綺麗に取り出せます。

なにこれキモイ

 

いちいち名前を指定するのは大変なので、コマンドを作ってみました。

#! /usr/bin/env bash

if [ -n  ]; then

	# ファイル名、拡張子を取得
	FILE_NAME=
	FILE=${FILE_NAME%.*}
	EXTENSION=${FILE_NAME##*.}

	# wordファイルだったら
	if [ ${EXTENSION} == docx ]; then
		echo ok

	# 違ったら
	else
		echo ".docxだけ"
		exit

	fi

else
	exit

fi

# 文章だけを取得
unzip -p  word/document.xml | xmllint --format - | grep -E "<w:(t|pPr)>" | gsed 's/<\/\?w:t>//g' | gsed 's;<w:pPr>;;' | awk 'NF==0{print "@@@"}{print}' | xargs | gsed 's/@@*/\n/g' | awk 'NF' | tr -d ' ' > ${FILE}.txt

 

このコマンドはWordファイルから、テキストファイルを作成します。

例えばtest.docxを引数にした場合、test.txtが作成されます。

word test.docx

コマンドの応用

例えば、フォルダに4つのWordファイルがあっても、簡単にテキストファイルが出来ます。

ls *.docx | xargs -n 1 word

素晴らしいシェル芸だ

簡単ですね。

テキストファイルの応用

テキストファイルにする事で扱いやすくなります。

 

例えば、こんにちはって書いてあるファイルを探したい時

grepは便利

 

例えば、うんこと書いてある回数を数えたい時

-cはcountの略

いくらでも応用例はありますが、テキストファイルにするメリットは沢山ありますね。

Wordでしか扱えなかったファイルが、色々なアプリで扱えるようになります。

まとめ

  • Wordファイルはzip化されたxmlファイル
  • シェルスクリプトでxmlファイルからtxtファイルを作成
  • txtファイルで圧倒的成長

今回は以上です。それではお疲れさまでした~。

雑記

Excelは嫌いですが、変なこともしています。

Excelは何でも出来るので、ネタになります。もちろん非効率です(笑)

エクセルでラズパイマウスを動かしてみた
The following two tabs change content below.

オーカワ

GCPばっか触ってるにゃーんエンジニア こちらのブログでも活躍中

コメント