Linux操作。Bashの文字数取得や文字列の切り出し等、編集方法まとめ。

スポンサーリンク




少し記述が減らせるかもしれません。

いつも「a composer」(@a_composer_info)をお読みいただきありがとうございます。

banba(@banba929)です。

最近はずっとシェルスクリプトで色々しています。

大量のファイル操作などを行う際にGUIでやると数年かかるような作業もシェルスクリプトが書ければ数十分で終わってしまうことも少なくありません。

テキストファイルを操作する場面が多いのですが、色々便利な小技?みたいなのを見つけたので共有したいと思います。

今回備忘録がてら記事にするのは「変数に入れた文字列の文字数カウント」と「変数に入れた文字列の切り出し」です。

ではGO。

変数に入れた文字数の文字数カウント

大量のテキストファイルを編集する際、文字列をカウントして処理を行うという動作をたびたび行うことがありました。

以前は”echo”コマンドと”wc”コマンドを用い、文字列の文字数カウントを行なっていました。

こんな感じですね。

“echo”コマンドはオプションで”-n”をつけることにより改行コードを付属しなくなり、”wc”コマンドはオプションとして”-m”をつけることで文字数のカウントとなります。

まあ、これでも問題なくカウントすることは行えるのですが、長い。

基本的に記述は少なく済ませたいところです。

${#変数名}で文字数カウントを行える

最近知ったのですが、文字数のカウントは${#変数名}だけで行えるようです。

つまりこういった感じですね。

結果が同じなのが確認できるかと思います。

こちらの方が余分な変数を使用しなくて済みますし、短くなります。

使用するコマンドも多少減らすことができるので、大量のファイル操作だとパフォーマンスも多少変わるんですかね?

変数に入れた文字列の切り出し

次にこちらです。

変数に入れた文字列の切り出し。

たとえば、”12345678″という文字列があったとして、

「最初の2文字の”12″だけ取り出したい」といった場合や、「途中の3文字目から5文字目までを取り出したい」など、文字列の一部抜き出しを行いたい場面は多々見受けられるかと思います。

以前は、先ほどの”echo”コマンドから”cut”コマンドに渡すことでそれを行なってきました。

こんな感じですね。”cut”コマンドにオプションとして”-c”をつけ、[取得開始文字数]-[取得終了文字数]を記述することで文字列の切り出しが可能になります。

まあ問題なく行えますが、もっと少ない記述で行えます。

${変数名:開始文字位置:取得したい文字数}

これだけで行えます。

先ほどと同じ文字を取得する場合だとこういった記述になります。

こんな感じですね。そして結果は同じ。

“cut”コマンドでもわかりやすいのですが、まあこっちの方が少なくて済むのでこちらでいいのではないかな、と思います。

まとめ

${変数名}になにかをつけて記述することで色々と簡単にすることができるのだなあ、という感じです。

一つ一つだと大して記述量は減らないですが、長い処理を記述する場合とかだとかなり効果がある気がします。

すごく大量のファイル操作やサイズの大きなものの編集とかだとパフォーマンスも変わるかもしれませんしね。

コマンドは早いですが、”while read”などで1行ずつの処理を行うとかなり遅いので、基本的にはコマンドのみでのファイル操作を目指していきたいですね。

やはり”awk”コマンド頑張って使えるようにならないといけないなあ…

ワンライナーでなんでもできる「シェル芸」を習得したいものです。

またなにか少しでも記述量を減らせるようなものを見つけたら共有させていただきますね。

同じような処理でも幾多の方法があるのが何とも面白いですね。

スポンサーリンク