人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

UNIXのコマンドで、ある文字列から任意の文字列を抽出するコマンド発行例を教えてください。例えば「ABCDEFGHIJKLMN」という文字列から「ABC GH LM N」という文字列を作り出したいのです。OracleのSQL文で言えば「substr(’ABCDEFGHIJKLMN’,1,3)||’ ’||subsr(・・・」とやるような感じです。抽出対象の文字列は4千行ほどあります。awk等を用いていろいろ試しましたがスマートな方法が浮かばないので教えてください。よろしくお願いいたします。

●質問者: smileless
●カテゴリ:コンピュータ
✍キーワード:ABC AWK Oracle SQL UNIX
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● nansya
●50ポイント

http://www.s.fpu.ac.jp/u-sano/awk1.html

awk1

awk でも substr は使えますよ。

◎質問者からの返答

ありがとうございます。

勉強不足でした。試してみたところ、無事質問内容のやりたいことはできました。

この方法ですと、文字列の間が半角スペースになりますが、これをカンマや任意の文字列にするにはどうしたらよいのでしょうか?


2 ● kiichigo
●10ポイント

http://www.perl.org/

The Perl Programming Language - www.perl.org

perl -ne ’print ”$1 $2 $3¥n” if /^(...)...(..)...(..)(.)./’ filename

とかどうですか?

二バイト文字が無ければこれでいけると思います。

◎質問者からの返答

なるほど、perlですか、ありがとうございます。

試してみます。


3 ● aki73ix
●10ポイント

http://tohoho.wakusei.ne.jp/wwwperl.htm

PERLを使われたらいいと思います

Web上だけでなくコマンドラインから使うこともできますよ

$ORGSTR=”ABCDEFG”;

$CHGSTR=~s/$str1/$str2/g;

:

:

と置換できますし抽出も簡単ですし何よりも

高速です


4 ● noboru
●10ポイント

http://www.geocities.co.jp/SiliconValley/3657/

NOBORUなページ

URLはダミーです。

awkでも出来ますよ。perlでもsedでもできると思いますが。たとえばawkならこうなります。

awk ’{print substr($0, 1, 3) substr($0, 7, 2) substr($0, 12, 3)}’ file.txt

perl で似たような形式で作るとしたらこんな風になります。

perl -pe ’$_=substr($_, 0, 3) . substr($_, 6, 2) . substr($_, 12, 3) . ”¥n”’ file.txt

◎質問者からの返答

両方のご解答、ありがとうございます。


5 ● nansya
●20ポイント

http://www.hatena.ne.jp/

はてな

> これをカンマや任意の文字列にするにはどうしたらよいのでしょうか?

awk で文字の連結は 空白です、ので

substr(〜 ) ”,” substr( 〜 ) ”,” substr( 〜 )

といった具合になります。

◎質問者からの返答

ありがとうございます。

”,”の方法は試しました。

そうすると 文字列△,△文字列

となってしまうんですよね。

もう少し勉強してみます。

何はともあれ、無事やりたいことができました。

ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ