- ベストアンサー
UNIXで文字列分割
UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。
- sjump2m
- お礼率65% (13/20)
- その他(プログラミング・開発)
- 回答数7
- ありがとう数5
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>aaaa bbbb cccc dddd bbbb eeee tttt bbbb yyyy > ↓「bbbb」で分割して$2と$4をファイルに出力 >cccc dddd,yyyy なんでやりたいことを最初から書かないのかわかりませんが、 awk '{split($0,A,/bbbb/);print A[2]","A[4]}' 前後の空白を除きたいなら、 awk '{split($0,A,/ *bbbb */);print A[2]","A[4]}'
その他の回答 (6)
- sakusaker7
- ベストアンサー率62% (800/1280)
#5を一部訂正します。 awk 'BEGIN{ FS="bbbb"; OFS="\n"} ($1=$1)||1' わかりやすくすると awk 'BEGIN{ FS="bbbb"; OFS="\n"} {$1=$1; print}'
- sakusaker7
- ベストアンサー率62% (800/1280)
レコードセパレータに2バイト以上の長さの文字列を指定できないawkはありますが、 フィールドセパレータで使えないawkというのは聞いたことがありません。 Solarisのawkは腐っていることで悪名高いですがそれでもこの程度のことはできます。 awk 'BEGIN{ FS="bbbb"; OFS="\n"} 1'
- notnot
- ベストアンサー率47% (4846/10257)
別のファイルに分けるのでなく、行を分割するということですか? それなら#3の方がお書きのsedが楽ですね。 sed 's/bbbb/\ /g' inputfile > outputfile g が1行の中で複数回置き換えるという意味です。 あと、UNIXでというのを見落としていました。確かにUNIXだとawkの機能はOSによって違います。Linuxだとまず間違いなく同じ(gnu-awk)なのですが。
- a-saitoh
- ベストアンサー率30% (524/1722)
Ano.2のように-Fで複数文字を指定するのはできる場合とできない場合があります。awkにもいろいろバージョンがあるので。 sed 's/bbb/\ /' でもできますが。・・ なぜawkで処理をしたいのでしょうか? それとひとつの行の中に区切りが2回以上出てくることはありますか?
お礼
回答ありがとうございます。 sedでも文字列分割できるんですね。 awkでなくても問題はありません。 ほかの処理がawkを使っていたので・・・ それと、区切りですが、1行に2回以上あります。
- notnot
- ベストアンサー率47% (4846/10257)
たぶん、「マルチバイト」という言葉を間違って使っているんじゃないかな。 マルチバイトというのは#1の方がそうとられたように、「日本語などのように1文字を複数バイトであらわす文字コード体系やその文字」を指します。 もしかして、awk のフィールドセパレータを1文字じゃなく文字列を使いたいということではないかと思います。 セパレータが複数文字の時は、それを正規表現と見なしてそれにマッチするものをセパレータとして扱います。bbbb が記号などを含まない英数字なら、単に、 awk -Fbbbb '{print $1 >"file1";print $2 >"file2"}' inputfile でいいはずです。
お礼
回答ありがとうございます 教えていただいた方法で実行してみたところ、期待した動作になりませんでした。 対象文字列:aaaa bbbb cccc dddd eeee ffff 実行処理:awk -Fbbbb '{print $1 >"file1";print $2 >"file2"}' inputfile 結果 [1]aaaa [2]bbb cccc dddd eeee ffff となってしまいます。 どうも、セパレータの1バイト目で分割してしまうようです。 これは、Solarisのawkだからなのでしょうか?
- sakusaker7
- ベストアンサー率62% (800/1280)
実際に使っているOSを明確にしてください。 UNIX の variant でも最近のものであれば商用のもの、無償配布のものを 問わず基本的なところでのマルチバイト文字対応はできています。 awkについてもしかり。
お礼
回答ありがとうございます。 No2の方の言うようにマルチバイトの意味を間違えていました。 複数文字列をセパレータとしたいという意味です。 ちなみにOSはSolaris9です。
関連するQ&A
- access で 方法を教えてください。
access で 方法を教えてください。 テーブルは セミコロン区切りで、区切られて表示されています (テーブル例) 1 aaaa;bbbb;cccc;dddd;eeee;ffff 2000byte 2 aaaa 300byte 3 bbbb;cccc;ffff 3000byte 4 ffff;dddd 120byte このセミコロン区切りの区切られたデータの 「件数」と「バイト」を表で表示させる方法を教えて欲しいのです。 上記テーブル例を使用しての(抽出例) 抽出条件 ↓ aaaa 2件 2500byte bbbb 2件 5000byte cccc 2件 5000byte dddd 2件 2120byte eeee 1件 2000byte ffff 3件 5120byte 宜しくお願いします。
- ベストアンサー
- オフィス系ソフト
- SQLの書き方について教えてください。
accessについて。 シートの中に列名name、列名friendnameがあります。 name,friendname aaaa,bbbb bbbb,cccc cccc,aaaa dddd,aaaa eeee,bbbb ffff,eeee ほしいデータは aaaa,bbbb,cccc bbbb,cccc,aaaa cccc,aaaa,bbbb dddd,aaaa,bbbb eeee,bbbb,cccc ffff,eeee,bbbb と友達の友達の名前がほしいのです。 SQLの書き方を教えてください。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- エクセルで教えて下さい。
エクセルで教えて下さい。 オートフィルタ、ピボットテーブル以外で関数などで教えて下さい。 A列に大量の文字列があり重複したりしてます。 そこで、 B列にはA列にある大量の文字列を重複なしで表示させたいと思ってます。 例えば A列 B列 AAAA AAAA BBBB BBBB AAAA CCCC CCCC DDDD DDDD EEEE DDDD FFFF EEEE FFFF EEEE AAAA みたいな感じです。A列は編集可能でQQQQを追加すれば自動でB列にも表示させたいです。 このようなことを簡単にできますでしょうか? 宜しくお願いします。
- ベストアンサー
- その他MS Office製品
- VBScript(vbs)での行の取得について
あるテキストの中に空行をはさんで文字列がある時に"ABCD"の文字列を含む場合はABCDを含むひとまとまりだけを取得したいのですがその方法について教えてください。 [テキスト] AAAA BBBB CCCC DDDD EEEE ABCD FFFF GGGG HHHH [取得したい部分] DDDD EEEE ABCD FFFF
- 締切済み
- その他(プログラミング・開発)
- wordの段落を通番で振りなおしたい
word2003で段落を設定した文書があるんですが、番号を振りなおしてつけているため、以下のようになっております。 1.aaaa 2.bbbb 3.cccc 1.dddd 2.eeee 1.ffff 2.gggg 3.hhhh これを以下のような通しの段落番号に変換することは可能でしょうか? 1.aaaa 2.bbbb 3.cccc 4.dddd 5.eeee 6.ffff 7.gggg 8.hhhh 各段落の1.を”自動的に番号を振る”を選択すればできると思いますが、数が多いため簡単な方法を探しております。 よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excel チェックボックスのコピー、チェックをONにすると対象セルの文字の色が変わる方法
下記の様にチェックボックス1をONにするとチェックのみ、チェックボックス2をONにすると対象セル(3つのセルAAAA、BBBB、CCCC)の文字の色が変わる様にしたいのですが、どうするのが早く、多く複製出来る方法はありませんか? 個々にチェックボックスを作成して、条件付書式などで作成は可能ですが、下記の様(DDDD、EEEE、FFFF・・・・)に複数作りたいので条件付書式では大変なので何か方法はありませんか。 VBAで作ると楽にいけると思うのですが知識不足で・・・。 ご教授願います。宜しくお願いします。 AAAA BBBB 1□ 2□ CCCC DDDD EEEE 1□ 2□ FFFF ・ ・ 1□ 2□ ・ ・ ・ 1□ 2□ ・
- ベストアンサー
- その他MS Office製品
- [Excel]重複データの一方のセルが持つ値を一方の空白セルに反映させたい
A列にある7000件ほどのデータの中から重複データのみを抽出し、 重複データの一方がB列に持つ値を、もう一方のデータのB列の空白セルに反映させたいのですが、方法はありますでしょうか? 「COUNTIF」を使って重複データの抽出はできますが、一方が持つデータをもう一方の空白に反映させることができません。 手作業では期限に間に合わない可能性がみえて焦っております。 恐縮ですがご教授いただけますでしょうか。 (例) [処理前] A列:B列:C列 1111:AAAA:aaaa 2222:BBBB:bbbb 3333:CCCC:cccc 1111: :dddd 2222: :eeee [処理後] A列:B列 1111:AAAA:aaaa 1111:AAAA:dddd 2222:BBBB:bbbb 2222:BBBB:eeee
- ベストアンサー
- その他(業務ソフトウェア)
- SQLでの集計
下記の様に、「複数のitemを買っているuserと購入されたitem」のテーブルと、 user item ---------------------------------- 田中 AAAA 田中 CCCC 田中 EEEE 北野 DDDD 北野 BBBB 北野 AAAA 小堺 CCCC 小堺 EEEE 松本 EEEE 松本 KKKK 松本 CCCC 松本 DDDD 浜田 BBBB 浜田 DDDD 下記の様な IDに紐付いた 「item」のテーブルから、 ID item ---------------------------------- 1 AAAA 2 BBBB 3 CCCC 4 DDDD 5 EEEE 下記の様に各itemと各itemを買った場合に一緒に買われるitemの一覧を結果 として表示させたいのですが、クエリの作り方が思い浮かばず、困っています。 ※)可能であれば、買われたitemを表示する際にはbuy1から(左側から)同時購入 回数の多いitemを重複せずに並べて表示したい ID item buy1 buy3 buy4 buy5 buy6・・・・ ---------------------------------- 1 AAAA CCCC BBBB DDDD EEEE 2 BBBB DDDD AAAA 3 CCCC AAAA EEEE DDDD KKKKK 4 DDDD AAAA BBBB CCCC EEEE 5 EEEE AAAA CCCC KKKKK 尚、IDと紐付いているitem数は決まっていますが、買われるitemの種類は上記 の様にIDが1~5だけではなく、集計してみないと判らない状況です。 今の所、SQLはACCESS(2003)上にて手打ちしています。 以上、ご教示のほど、宜しくお願い致します。
- ベストアンサー
- その他(データベース)
- エクセルについての質問。
エクセルの関数に関して質問があります。 |10001|AAAA|10002|BBBB| |10002|BBBB|10004|DDDD| |10003|CCCC|10004|DDDD| |10004|DDDD|10001|AAAA| |10005|EEEE|10005|EEEE| ちょっと分かりにくいですが 一番上の行ですと、 列A=10001 列B=AAAA 列C=10002 列D=BBBB と考えて下さい。 質問です。 --------------------------- 列Cの数値を列Aから検索して 同じのがあれば列Bの数値を列Dに表示する。 --------------------------- この関数を教えて頂けませんでしょうか? 宜しくお願い致します。
- 締切済み
- その他MS Office製品
お礼
回答ありがとうございます。 sed 's/bbbb/\/g' inputfile > outputfile bbbb→\で置換するということですよね。 質問するときに、書いておけばよかったんですが、 やりたいことはセパレータで分割して、分割したフィールドから 任意のフィールドをファイルに出力したいです。 例) aaaa bbbb cccc dddd bbbb eeee tttt bbbb yyyy ↓「bbbb」で分割して$2と$4をファイルに出力 cccc dddd,yyyy といった感じにしたいです。 よろしくお願いします。