ベストアンサー UNIX shの文字列の編集に関してのご質問です。 2010/08/12 21:21 UNIX shの文字列の編集に関してのご質問です。 添付されている図Aまで、パイプやperlやawkを使用して作成しました。 (例文1) そこから、パイプを使用して、図Bのように3列目($3)の@マークのみ削除をしたいのですが、うまくいきません。 例文1に続けて作成していきたいのですが、図AからBに編集する方法がわからないため、ご教示お願いいたします。 ※ perl または、awkまたはsedを使用可能 例文1 perl -ep **** | awk {print $1 ) | ・・・・・ 画像を拡大する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー notnot ベストアンサー率47% (4900/10358) 2010/08/12 21:36 回答No.1 awk '{gsub(/@/,"",$3);print' あと、 >UNIX shの文字列の編集に関してのご質問です。 自分の行為に「ご」や「お」は付けません。 質問者 お礼 2010/08/13 14:36 ご教示ありがとうございました。 大変助かりました。 > 自分の行為に「ご」や「お」は付けません。 日本語の勉強をがんばります。 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発その他(プログラミング・開発) 関連するQ&A uniqとループを使用しないで、文字列のフィルターの方法 表題の件にて、質問です。 bashでshを作成しています。いろいろ試しているのですが、 UNIXのコマンドで、uniqコマンドがありますが、それと同じことをsed又は、awk等を使用して、作成することは可能でしょうか? 作成が可能であれば、記述方法を教えてくださいませ。 ※ループ文を使用しないで、出来るだけ完結なコマンド文にしたい。 例: file.txt 以下中身 ---------------------- AAAA BBBB BBBB CCCC CCCC ----------------------- ↓ AAAA BBBB CCCC の3文字のみを出力したい。 ご存知の方いらっしゃいましたら、ご教示ください。 UNIX系の文章処理についてのご質問 UNIX系での文章処理方法について、ご教授願います number150=Test(A,B); が記述されているテキストファイルtest1.txtを number150 =Test(number150_1,number150_2); と出力(test2.txt)をさせたいのですが、 sed "s/A/{print $1}/g" test1.txt > test2.txt というふうにしてみましたが、うまくいきませんでした。awkも参考にトライしてみましたが失敗しました。 ちなみに s/A/number150/gと直接指定しない(number150は一例でnumber200や他の場合もある)でうまく文章処理を行いたく質問させていただきました。 ご存知の方、ご教授願います。 二つのファイルから条件に一致する行を抽出 AとBの二つのファイルがあります。 Aの2列目3列目の間に存在するBの2列目のファイルを抽出してCのファイルを作成したいです。 awkのifでチマチマ作ればできるとは思うのですが、他に簡単にできる方法はないでしょうか? awkだけでなくperlやpythonなどでも問題ないです。 <A> A 10 20 B 30 40 C 50 70 D 90 110 <B> あ 15 い 25 う 55 え 75 お 95 <C> あ 15 う 55 お 95 UNIXで、とあるテキストに対して2文字区切りで改行をいれるには? UNIXのシェルスクリプトで、このような動作ができないものかどうか考えています。 あるテキストファイルの内容を、2文字ごとに区切って改行を入れるように加工する 例えば file1.txt が以下のような内容であれば --file1.txt-- 000092 027301 01 0263000001 2文字ずつ区切って改行を挿入したファイル --file2.txt-- 00 00 92 02 73 01 01 02 63 00 00 01 を生成したいと思います。 ここで元のファイルは必ず、半角の数字のみで構成されており、 1行の文字数は最低2文字以上あり、なおかつ奇数個の文字列は存在しないものとします。 awk や grep や sed を組みあわせて考えているのですが、 なかなか解決に至りません。 どなたかお知恵を拝借願います。 UNIXのシェルスクリプトで負数の正負を反転させるには? UNIXのシェルスクリプトで負の数の符号を反転して生の数にしようと思ったらうまくできませんでした。 #! /bin/sh NUM=4 NUM2=-$NUM echo NUM2=$NUM2 とすると --4 となってしまいました。 また、 NUM2=`expr $NUM * (-1)` 等もやってみたのですが、エラーになりました。 結局、文字列としてawkで'-'を削ったのですが、やり方を間違えてる気がしてなりません。 awkやperl等を使わず、UNIXの単純な機能だけで数の正負を反転させる方法があれば教えてください。 基本情報でよくある2進数の符号の反転のやり方でもできると思うのですが、 10進数だとやり方がよくわかりません、、これでできるなら、このやり方も教えていただけるとありがたいです。 以上、よろしくお願いします。 perlの文字列組み合わせ perlでプログラムを作成中です。 作成したモノはうまく動かないので掲載できませんが、 どなたかお知恵を貸してください。 入力文字列に対して 1をA、2をB、3をC に置換するプログラムを作成中です。 ただし、全ての組み合わせを出力したいのです。 つまり、”213”と入力すると回答は、 B13 BA3 BAC 2A3 21C 2AC B1C と出力したいのです。 プログラムとしては、入力文字列を1つずつを配列に入れて、それぞれの変換 をかけ、1つずつ組み合わせて出力しているのですが、どうもうまくいきません。 手法は特に固執してませんので、どの様な形でも結構です。 よろしくお願いします。 Perlでの文字列操作について Perlを使用しての文字列操作について教えてください。 たとえば以下のような数字とアルファベットが順に並ぶ文字列があるとします。 11A4C555D67B114B9423C アルファベットは1文字ですが、数字は何個でも連続で並びます。 この文字列を「数字アルファベット」の部分で分割し、配列に格納したいのですが、うまくいきません。 @array=('11A','4C','555D','67B','114B','9423C') どなたか教えてください。よろしくお願いいたします。 ExcelVBAでの文字列置換について ExcelVBAでの文字列置換について ExcelVBAは全く初心者のですが、下記の処理を早急に行う必要があり、質問させていただきます。 物品の使用者をエクセル管理しています。 シート1のA列に物品名、B列に現使用者名を入力しています。(約2000件) 一部の使用者に変更があった場合に、シート2に振替リストを シート2 A列=現使用者 B列=新使用者 と作成しています。 シート1のB列:現使用者から、シート2のA列:現使用者と同一な文字列を検索し、シート2B列:新使用者に置換するマクロはどのように書けばよいのでしょうか? 可能であれば、シート2のC列に置換結果を表示させたいです。 unixのperlで UNIXのPerlでは引数は@ARGVに入ると思うのですが、 a.pl *.c "*.c" という引数を入れるとファイルが展開されそのフォルダの中の "12-1.c" とか "12-2.c" とかいう引数が、配列に1つずつ入ってきました。 引数の文字列を何の修正もなしに(できればスペースも)受け取る方法はないですか? A列の文字列によってB列への入力を変える こんにちは。マクロ初心者で、質問なのですが、 エクセルで、A列に入力されている文字列によって、 B列文字を自動で入力するマクロを作成したいのですが、 どのように記述すればよいでしょうか? 例: A列 |B列 | あ | 01 |A列「あ」の場合、B列の同じ行に「01」 い | 02 |A列「い」の場合、B列の同じ行に「02」 といった感じです。 初歩的な質問で申し訳ございませんがご教授願います。 正規表現での文字列検索 WIN7で使用しているアプリケーションで文字列検索する場合の 正規表現について教えてください。 問) 下記の例文で「A」を含む文字列を検索する場合に、「▼」が含まれる場合は 最後の「▼」の後に「A」がある場合のみ検索したい。 例文の場合、(2)、(3)のみヒットさせたい。 例文) (1)***A**▼**▼*** (2)****▼*A** (3)**A**** (4)***▼**A▼**** *、▼の数はいろいろで*は任意の文字です。 よろしくお願いします。 文字列から特定の文字を抜き出す こんにちは。 シェルスクリプトで文字列から特定の文字を抜き出し、 変数に入れたいのですが、うまくいきません。 申し訳ありませんが、アドバイスをお願いいたします。 文字列 $moji=aaa_bbb_ccc (文字は変動します) $a=aaa $b=bbb $c=ccc と"_"毎に変数に代入したい。 echo $moji | awk -F_ '{print $2}' で文字を標準出力に取り出すことはできるのですが、 そこから変数に代入する方法がいまいち分かりません。 ファイル中の記述文字の一括置き換えについて perlにてsed相当の処理を行いたいのですが ご存知の方、教えてください。 [処理内容] ・外部入力より変数定義・・・$A、$B ・ファイル「AA.txt」中記述の「$A」を「$B」に一括変更する。 単純にsystem関数でsedを使用すれば済むようでもありますが system("sed -e 's/'$A'/'$B'/g' $AA.txt > AA.tmp"); と記述すると失敗してしまいます(構文エラーではありません)。 単純に記述ミスでしょうか? 他に上記のよな処理を実現できるコマンド等ございましたら、 ぜひご教授ください。 サーバー・・・HP-UX 開発言語・・・Perl5 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。 リストファイルの列の操作 シェルスクリプト(Bシェル)の中で、 例えば以下のようなカンマ区切りのリストファイルを ---------------- a1,b1,c1 a2,b2,c2 a3,b3,c3 a4,b4,c4 a5,b5,c5 a6,b6,c6 a7,b7,c7 a8,b8,c8 a9,b9,c9 a10,b10,c10 ---------------- 以下のように変換する方法が知りたいです。 ---------------- xx,a1,b1 xx,a2,b2 xx,a3,b3 xx,a4,b4 xx,a5,b5 xx,a6,b6 xx,a7,b7 xx,a8,b8 xx,a9,b9 xx,a10,b10 ---------------- ※3列目を削除して、1列目に"xx"の文字列を挿入。 forやwhileで1行ずつ読み込んで処理するのではなく、 sedやawk等を用いてズバッと変換する方法が知りたいです。 宜しくお願いします。 エクセルでA列にある文字をB列で探す Excelで、A列に入っている文字(一文字)がB列のどこかに含まれているか、そうでないかを調べるにはどうすればいいでしょうか。 データ例 A B 算 漢字 国 字画 理 文字 社 国字 図 数字 画 画数 となっているときに Bの字画、国字、画数、を見つける方法です。 データが少なければA列を一つ一つ検索していけばいいのはわかるのですが、まとめてできる方法を教えてください。 ある列をキーにして、複数行を1列で出力したい AWKで、以下の処理をしたいです。 ・1列目をキーにしたテーブルを作る ・1列目共通で2列目が複数ある場合は、並べて記載したい。 どなたか、スクリプト案お願いします。 例 Input file A あ B あ B い C い Output file A あ B あ/い C い 文字列変換 添付図をご覧ください。 範囲 A1:B6 に英語の人名が入力されています、。 セル A7 に式 =SUBSTITUTE(A1," ","") を入力して、此れを右および下方にオートフィルしたものを範囲 A7:B12 に示しています。 此処で質問ですが、最初に下表に示すスペースなしの文字列データがあった場合、此れを上表に示すデータに変換する数式を教えてください。 マクロ音痴の私のために、どうか数式でお願いします。 数式が短くなるなら、配列数式でも構いませんが、補助列(行)等を使用しないことを希望いたします。 VBAで文字列を分割して比較 エクセルでこんな事をしたいんですけど、どうしたらいいか教えてください! A1 教えて!goo #1マイクロエクセル A2 教えてgoo #1マイクロアクセス A3 教えて!goo #1マイクロワード A4 新・教えて!goo #1マイクロエクセル A5 教えて!goo #2マイクロエクセル B1 ようこそ「教えて!goo 」へ C1 1 D1 マイクロソフト エクセル アクセス A列のセルの内容がB1,C1,D1の内容と比較して正しいかどうかチェックさせたいんです。 ポイント 1、A列は字数の制限がありB1とD1の内容をアットランダムに縮めてある (A1の"マイクロエクセル"という文字列がD1にあるかどうかでは不十分) 2、B1の値は必ず半角整数で、A列では"#"の後に入っている 3、A列=B1&C1&D1という並びは固定 4、スペースは無視 上記の場合 A1=TRUE A2=TRUE A3=FALSE A4=FALSE A5=FALSE が返せればOKです。 特に教えて欲しいところはA列の区切り方 ("#"の左右で区切るには?) (整数とその後で区切るには?) と、アットランダムに縮められた文字列を どうやって照合させたらいいかという点です。 もしいくつかの方法があるのでしたら、 出来るだけ動きが軽いほうが嬉しいです。 (A列のデータが膨大なので) よろしくお願いします。 sedやperlでの2バイト文字を含む変換 こんにちは。 sedコマンドは、texに付属していた日本語対応のものを使用しており、 perlはWindows用のActive Perl v.5.12.2を使用しています。 カレントディレクトリにあるファイルやフォルダにおいて、 名前を一括して変換したいと思い、以下のようなNameConv.batというバッチスクリプトを作成しました。 ____________________________________________________________ @echo off for /f "delims=" %%a in ('dir /b !opt!') do ( for /f "usebackq delims=" %%b in (`echo %%a^| sed -e "s/%~1/%~2/g"`) do ( move /y "%%a" "%%b" 1>nul 2>nul if not "%%a"=="%%b" echo 「%%a」→「%%b」 ) ) ____________________________________________________________ このバッチスクリプトを NameConv.bat " " "_" の様にして呼び出すと上手く行きました。 (この場合は、カレントディレクトリの全てのディレクトリとフォルダの名前において、 スペースがアンダーバーに変換されました。) ところが、 NameConv.bat "スペース" " " のように、第一引数に変換文字列に2バイト文字を使用すると、 以下のようなエラーメッセージが出て上手く行きませんでした。 sed: -e expression #1, char 14: Unterminated `s' command どうやら、 echo %%a| sed -e "s/スペース/ /g" といったコードは、上手く行かなかったようです。 そこで、この問題を解決しようと、以下のようなNameRep.plというPerlスクリプトを作成しました。 ____________________________________________________________ #日本語を扱うために必要な設定 use encoding "cp932"; use open ":encoding(cp932)"; use open ":std"; map{ binmode($_,":crlf"); } qw/STDIN STDOUT STDERR/; #置換操作 $name="$ARGV[0]"; $name =~ s/$ARGV[1]/$ARGV[2]/g; print "$name"; ____________________________________________________________ そしてこのスクリプトを for /f "delims=" %a in ('dir /b') do ( @perl NameRep.pl "%a" "スペース" "_" ) の様にしてコマンドラインから呼び出すことで、「スペース」という文字列が、 きちんと処理できるかを試したところ、以下のようなエラーメッセージが出ました。 Unmatched [ in regex; marked by <-- HERE in m/\x{00d8}\x{00f9}\x{005b} <-- HERE \x{00d8}/ at C:\Users\kei\NameRep.pl line 11. どうやら $name =~ s/$ARGV[1]/$ARGV[2]/g; の部分で、$nameや$ARGV[1]に2バイト文字が含まれていると、上手く行かないようです。 #日本語を扱うために必要な設定 以下のコードブロックで、シフトJISに対応できるはず(少なくとも今までは問題なく扱えました) なのですが、何故か上手く行きません。 そこで、sedコマンドやperl、特にperlにおいて、シフトJISコードでの2バイト文字の扱い方を御存じの方に、何かアドバイスを頂きたいと考えています。 長くなりましたが、どうぞよろしくお願い致します。 ファイル内の文字列を置換 掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。 注目のQ&A 「前置詞」が入った曲といえば? 緊急性のない救急車の利用は罪になるの? 助手席で寝ると怒る運転手 世界がEV車に全部切り替えてしまうなら ハズキルーペのCMって…。 全て黒の5色ペンが、欲しいです 長距離だったりしても 老人ホームが自分の住所になるのか? 彼氏と付き合って2日目で別れを告げられショックです 店長のチクチク言葉の対処法 カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど
お礼
ご教示ありがとうございました。 大変助かりました。 > 自分の行為に「ご」や「お」は付けません。 日本語の勉強をがんばります。