5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

shell で4文字づつ切り出す方法

Last updated at Posted at 2014-01-14
  • シェルスクリプト総合スレより

fold

  • お手軽
  • 出力を加工するのは xargs などでおこなうのかな
$ echo "hogefuga" | fold -s4
hoge
fuga

$ echo "hogefuga" | fold -s4 | xargs -I {} echo A:{}
A:hoge
A:fuga

while read

  • read -N が環境によってはない
  • 出力の加工や利用が簡単そう
  • 多分大丈夫だけど、サブシェル問題は忘れずに
$ echo "hogefuga" | while read -N 4 i;do echo ${i};done
hoge
fuga

$ echo "hogefuga" | while read -N 4 i;do echo A:${i};done
A:hoge
A:fuga

参考スレ

シェルスクリプト総合 その22

107 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 12:07:28.33
標準入力(od -xが出力した文字列)の文字列を4バイトごと切り取り、 
それをforループで処理させたい思っており、現在はこんな感じのスクリプト作ってます 
OSはCentOS、シェルはbashです 

#!/bin/sh 
for STR in `4バイトごとに切り取る処理` 
do 
hogehoge $STR 
done 

この「4バイトごとに切り取る処理」ですが、現在はsplitで4バイト単位に切り取り、 
分割後のファイルを順次読み込ませるということにしているのですが、 
分割後のファイルが沢山作られるので遅くなり、またやりたい事の割にやってることが 
複雑すぎるので、なんとか改善したいと思ってます 

そういうことをしてくれる、いい方法はありますでしょうか 
標準出力を、指定したバイト数単位にセパレータを挟んで出力してくれるコマンド、みたいな 

cutでやってみようと思ったのですが、これだとオフセットを4バイトずつずらしながら 
切り出していく処理となりそうで、これもまた複雑だなぁ、と… 

108 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 12:14:05.59
$ echo 'hogefugapiyo' | while read -N 4 STR; do echo $STR; done 

109 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 12:38:48.75
ふらっと通りがかったが感動した! 

110 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 13:01:14.29


107です 

>>108 
なるほどreadでやるのですね 
バイト数も任意で変更できそうで、柔軟性もありますね 

ありがとうございました 

111 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 13:41:30.36
>>108 
つfold 
じゃだめなんだっけ? 
forをwhileに書き換えるのはおすすめしない。 

112 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 14:35:27.41
>>108 
read: Illegal option -N 

113 :名無しさん@お腹いっぱい。 :2014/01/11(土) 15:13:02.47
dd bs=1 count=切り出しバイト数 skip=オフセットバイト数 
でなんとかならんかい? 

114 :名無しさん@お腹いっぱい。 :sage :2014/01/11(土) 15:16:16.51
> 標準出力を、指定したバイト数単位にセパレータを挟んで出力 

fold だとセパレータの指定はできないんじゃない? 

 $ sep="@"; echo 'hogefugapiyo' | while read -N 4 str; do echo -en "${str}${sep}";done 

とかしたいのかと思ったけど… 

# 最後にセパレータがくっついちゃうけどね
5
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?