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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:--
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:nansya No.1

回答回数40ベストアンサー獲得回数0

ポイント50pt

awk でも substr は使えますよ。

id:smileless

ありがとうございます。

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

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

2003/11/25 17:37:06
id:kiichigo No.2

回答回数167ベストアンサー獲得回数0

ポイント10pt

http://www.perl.org/

The Perl Programming Language - www.perl.org

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

とかどうですか?

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

id:smileless

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

試してみます。

2003/11/25 17:38:02
id:aki73ix No.3

回答回数5224ベストアンサー獲得回数27

ポイント10pt

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

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

$ORGSTR=”ABCDEFG”;

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

:

:

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

高速です

id:noboru No.4

回答回数94ベストアンサー獲得回数0

ポイント10pt

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

id:smileless

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

2003/11/25 18:14:48
id:nansya No.5

回答回数40ベストアンサー獲得回数0

ポイント20pt

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

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

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

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

id:smileless

ありがとうございます。

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

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

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

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

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

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

2003/11/25 18:17:48

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません