• 締切済み

UNIXシェルでこんな事がしたいのですが。

furaijinの回答

  • furaijin
  • ベストアンサー率54% (12/22)
回答No.1

awkを使えばいけるかと思います。 多少強引ですが $ awk '{print "string0" "\t" $1, $2 "\t" $3 "\t" $4 "\t" $5 "\t" $6 "\t" $7,$8 }' test.txt でやりたいことはできると思います。

関連するQ&A

  • シェルスクリプト(bash)によるファイルの編集

    シェルスクリプト(bash)によるファイルの編集についてのご相談です。 私にあまりスクリプトの知識がないので申し訳ございませんが、 どなたかお知恵を拝借させてください。 よろしくお願いします。 【条件】 ・以下のような文字列を含むファイルが複数あるとします。 ・そして、その文字列は、ファイル内の不特定の行に存在します。 ※[半角スペース]、[タブ]は実際には便宜上記載していますが、実際は 本当の半角スペース、タブが入ります。 AAA[半角スペース]BBB AAA[半角スペース]CCC AAA[タブ]BBB AAA[タブ]CCC 【やりたいこと】 このとき、 AAA[半角スペース]BBB および AAA[タブ]BBB の行の下に、それぞれ、 AAA[半角スペース]DDD  と   AAA[タブ]DDD を挿入したいのですが、これをスクリプト(コマンド)でどのように行えば よいのかわからずに困っています。

  • ある場所のスペースをタブに置換するシェル

    以下の処理を行いたいシェルスクリプトを作成したくいと思っていますがやりかたがわからないので教えてください。 使用しているシェルはbashです。 ログファイルのある箇所のスペースをタブに変換する 2007-09-02 23:00:00.137 DEBUG [main] ログ内容1 -ログ内容2 2007-09-02 23:00:00.139 WARN [main] ログ内容1 -ログ内容2 2007-09-02 23:00:00.140 INFO [main] ログ内容1 -ログ内容2    :    : というログのなかの  DEBUG(またはWARN,INFO)の文字の前  [main]の前後  -ログ内容の前 の3箇所のスペースをタブにおきかえる方法を教えてください。 (ログ内容のなかにスペースがある可能性もあるが) 変換後は以下のようになります。 2007-09-02 23:00:00.137\tDEBUG\t[main]\tログ内容1\t-ログ内容2 2007-09-02 23:00:00.139\tWARN\t[main]\tログ内容1\t-ログ内容2 2007-09-02 23:00:00.140\tINFO\t[main]\tログ内容1\t-ログ内容2 よろしくお願いします。

  • linuxのシェルでファイル名に先月以前の日付があるのを削除したい

    linuxのシェルでファイル名に先月以前の日付があるのを削除したい bashでcshellでも良いのですが、 /pgsql/data/pg_log/ の下にたまったlog postgresql-2010-04-01-*.log postgresql-2010-03-31-*.log postgresql-2010-03-30-*.log などのうち、 先月以前の日付があるのを削除するスクリプトを作りたいのですが、上手くいきません。 ls postgresql*.logから全件数回して、if文で比較しようとしましたが、判定がうまくいきません。 何がネックになっているかと言いますと、 文字列「postgresql-2010-04-01-*.log」 文字列「postgresql-2010-04」をif文で比較すると、=の判定はできますが、 >や<で判定すると、全てthenになってしまいます。 文字の大小比較はできないようですね? また、 「postgresql-2010-04-01-*.log」 から、12文字目から7文字抜き出したいのですが、 substrのような事も出来るのかどうなのか分かりません。 bashでこういう事をするのはあまり向いていないのでしょうか? cshellとどちらが向いているでしょうか? あるいはパールなんかを使った方が良いのでしょうか? 当面のやりたい事をクリアする方法、および、ツールの選定についてご教授下さい。 以上、よろしくお願いします。

  • シェルからSQLのPROMPTコマンド出力結果をそのまま出力したい(半角スペースがTABになる)

    Linux(RHEL5)を構築し、以下のようなテストスクリプトを作成しました。 その際に、PROMPT分にて出力した半角スペースが、一部タブに置き換わってしまい、こちらを、空白のまま表示させる方法について、ご教授頂けますと幸いです。 構成 test.shから、testsql.sqlを実行し、プロンプト出力を行う。 test.sh 内容 #!/bin/bash splplus /nolog conn / as sysdba; @testsql.sql testsql.sql 内容 PROMPT ##              ## PROMPT ##     TEST     ## PROMPT ##              ## ●実行コマンド sh ./test.sh >test.log ●結果 ・vi test.log にて、##と##の間の半角スペースが一部タブになる (投稿時は、閲覧のしやすさのため全角スペースで記載しています) ・出力結果をバイナリ転送にて、Windowsに転送、 テキストエディタで表示してもタブになっています。 文字コードを色々変えたり、SCRIPTコマンドでの実行で上手くいくかも と思ったのですが、やはりダメでした・・よろしくお願いします

  • splitを使ってスペース位置で文字列を区切りたい

    splitを使ってスペース位置で文字列を区切りたいのですが、 String[] word = str.split(" ",0);  //半角空白 のように書くと、全角スペースは区切りとしてみなされず、 String[] word = str.split(" ",0);  //全角空白 のように書くと、半角スペースは区切りとしてみなしてくれません。 全角スペースでも半角スペースでも、スペース位置で文字列を区切りたいのですが、どのように書けばよいのでしょうか?

    • ベストアンサー
    • Java
  • PerlでHTTPを扱いたい

    たとえば あるファイルhttp://xxx.xxx.xxx/xxx/xxxx.xxxを Perlで*.cgiのあるフォルダにそのファイルを ./yyyymmdd_hhmmss_xxx.xxx.xxx_xxx_xxxx.xxxとして 保存したいのですが 検索してもヘッダがついていたり、そのままな感じだったりして思うようなものは見つからず Perlではファイル入出力を少しと$ENV{'~'}とか時刻とかしかつかったことがないので ほとんどわかりません。 環境は 自宅では Windows95でAnHTTPD サーバーは@PAGESのものです よろしくお願いします

  • unixのperlで

    UNIXのPerlでは引数は@ARGVに入ると思うのですが、 a.pl *.c "*.c" という引数を入れるとファイルが展開されそのフォルダの中の "12-1.c" とか "12-2.c" とかいう引数が、配列に1つずつ入ってきました。 引数の文字列を何の修正もなしに(できればスペースも)受け取る方法はないですか?

    • ベストアンサー
    • Perl
  • UNIX のシェル 文字の置換について

    シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

  • 日付時間をファイル名にしたいが…。

    コマンドプロンプトからログファイルを作成しようとしています。 ファイル名の後に日付・時間をつけて TEST_YYYYMMDD_HHMMSS.log形式にしたいと思っています。 (例:TEST_20050118_120000.log) それで、ファイル名を以下のように指定したのですが TEST_%date:~2,4%%date:~7,2%%date:~10,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log これだと、0時~9時の間は TEST_20050118_ 90000.log のように時間の頭ヒトケタが空白になってしまうらしく、 実行させてもエラーになってしまいます. なにか良い方法がありますでしょうか。 よろしくご教授お願いいたします。

  • trで文字削除

    ファイル名で使用不可な文字を削除しようと思い以下のようにしました。 ---------- $str =~ tr/\/\\:*?"<>|//; ---------- (置換後の設定部は記載無しで削除したい) しかし、何も変換はされません。 置換後を半角スペース一文字にすると半角スペースに置換されますが、文字削除をするべく何も書かないと、何も変換されません。 このような処理はできないのでしょうか? perlのバージョンは以下です。 ---------- perl -v This is perl, v5.8.6 built for i686-linux ----------

    • ベストアンサー
    • Perl