• ベストアンサー

シェルスクリプトでテキスト操作

1.txtに aaaaaa,13歳 bbbbbb,11歳 ccccccc,22歳 2.txtに aaaaaa,男 bbbbbb,女 ccccccc,女 とある場合に aaaaaa,13歳,男 bbbbbb,11歳,女 ccccccc,22歳,女 という内容のデータを作りたい時、どうかいたら良いですか? whil read line do ~ doneのようにぐるぐる回さない方法があれば教えてくだ愛

質問者が選んだベストアンサー

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

両者ソート済なら join -t, 1.txt 2.txt

muuming2001
質問者

お礼

おー joinは未体験でした。ありがとうございます。

関連するQ&A

  • シェルスクリプト shiftとwhile

    下記の内容はスクリプトの一部を抜粋した内容です。 2箇所、理解が出来ない部分があるので、教えて頂けますでしょうか。 ------------------------------------------------ shift $(( $OPTIND -1)) if [ $# -eq 0 ]; then FileName="" elif [ $# -eq 1 ]; then if [ "\-" = "$1" ]; then FileName="" else FileName="$1" fi else echo "オプションが多い" exit fi if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done else while read line; do fcnctionA "$line" done < "$FileName" fi ------------------------------------------------ (1) if [ "\-" = "$1" ]; then 部分が理解できないのですが、教えて頂けますでしょうか。 (2)  if [ "" = "$FileName" ]; then while read line; do fcnctionA "$line" done 基本はファイル名を指定して実行する事を前提としていると思います。 ファイル名を指定しないでスクリプトの実行をする場合は、1行ずつ標準入力で 入力すると思うのですが、このような使い方をする場合はあるのでしょうか。 下記よりも便利な点があるようでしたら、教えて頂けますでしょうか。 または、shiftと関係があるのでしょうか? if [ ! "" = "$FileName" ]; then while read line; do fcnctionA "$line" done < "$FileName" fi

  • シェルスクリプト

    2月14日頃質問のあった”UNIXのシェルスクリプトを使用してテキストファイルのある列にある特定の文字列を条件としてその行を出力するということをやりたい”を下記のように作ってみました。問題ないか逆質問の形で投稿します。(ルール違反かもしれませんが質問が締め切られているので・・・) #!/bin/bash CAT=YAHOO while read LINE do echo $LINE > tmp.txt DOG=`cut -d" " -f2 tmp.txt` if [ "$CAT" = "$DOG" ] then echo "$LINE" fi done < catalog.file

  • 複数行にわたる処理

    こんばんは。perl初心者です。 どうしてもわからないので、どうかアドバイスよろしくお願いします。 一つのファイルに、以下のような3行で一組の塊がある場合、 <line_a>: aaaaaa <line_b>: BBBBBB <line_c>: cccccc <line_a>: aaaaaa <line_b>: bbbbbb <line_c>: cccccc ... <line_b>の行に文字列"BBBBBB"が含まれていたら、<line_a>の内容を"aaaaaa"から"AAAAAA"に置換してファイルを上書きしたいのですが、 どうやったらいいのでしょうか・・・。

    • ベストアンサー
    • Perl
  • unixのシェルでファイル内容を読み込む

    ど初心者です。わかりづらいかもしれませんが宜しくお願いします。 以下のような処理を行いたいと考えています。 (1) aaa.sh(シェルスクリプト)にてバッチプログラムを起動 (2)バッチでエラーの場合、結果ファイル(bbb.txt)に「1」を出力する。 (3)aaa.sh(シェルスクリプト)にて結果ファイルの内容を読み取り「1」の場合は、再度バッチプログラムを起動する。 このうち(3)の処理にて、結果ファイルの読み込み方法がわかりません。 調べた結果、以下のような処理で可能なようですが・・ while read LINE; do echo $line done < aaa.txt 読み込むのは1行なので、ループ処理にはしたくないのですが、例えば「read LINE aaa.txt」のような簡単なコマンドで、ファイルの中身を読み込むことはできないのでしょうか? 実はUNIXが初めてで、しかもスケジュールに余裕がないため焦っております。 なにぶん知識不足な故、ちんぷんかんぷんな質問かも知れませんが、よろしくお願いいたします。

  • シェルスクリプトでwhileを用いてrshを繰り返し使う場合

    Bシェルスクリプトでリモートシェル(rsh)を使う場合の質問です。 現在、以下のような状態です。 有識者の方、アドバイスをお願いします。 ・Aでは、ループされずhostAの場合のみ処理がされます。 (while文が効いていない) ・Bでは、ループされて問題なくhostA,hostB,hostCが処理されます。 (while文が効いている) なぜなのでしょうか。。。(r系コマンドの特性?) ちなみり、リモート側のサーバには.rhostsが設定してあり 問題なくコマンドが通ることは確認済みです。 スクリプトA---------------------------------------------- #!/bin/sh while read line ; do rsh $line hostname done <<END hostA hostB hostC END スクリプトA---------------------------------------------- スクリプトB---------------------------------------------- #!/bin/sh while read line ; do echo " HOST=$line" done <<END hostA hostB hostC END スクリプトB----------------------------------------------

  • シェル:複数ファイルの計算方法に困ってます

    ファイル毎に使用容量を管理するシェル作成中、下記の内容で困ってます。いいアイデアを教えていただけないでしょうか。 よろしくお願いします。 【 前日分 】old.txt                カウント 使用量 ファイル名                5 10 aaaaaa.txt         5 15 bbbbbb.txt 3 20 dddddd.txt  【 当日分 】 new.txt  カウント 使用量 ファイル名 1 50 aaaaaa.txt 1 65 bbbbbb.txt 1 15 cccccc.txt 【理想】new.tmp カウント 使用量 ファイル名 6 60 aaaaaa.txt 6 80 bbbbbb.txt 1 15 cccccc.txt 3 20 dddddd.txt new.txtと同じ名前がold.txtにあれば、カウント列・使用量列をそれぞれ加算しnew.tmpに出力。 new.txtにあってold.txtに無い場合はそのまま行をnew.tmpに出力 new.txtになくてold.txtにある場合もそのまま行をnew.tmpに出力 説明 カウント・・・毎日加算処理をしカウントを上げていく        (よってnew.txtのカウントは必ず "1") 使用量・・・ファイルの使用量 ファイル名・・・ファイル名 上記のようなことは出来るでしょうか? diff・grep・sedとか調べてみたんですが融合技が見当つかず・・・ よろしくお願いします。

  • シェルスクリプトについて

    bangou.txtには ▲ 123123 123123 100000 ▲ ▲ というように数値が入っています。(▲は空白ですが改行コードがはいってます) この場合、1行目と3行目を比較するスクリプトを作りたいと思って 色々調べて以下のようなスクリプトを作ってみましたけどうまく動きません。 #!/bin/bash for iii in `sed -n '1p' bangou.txt` do jjj=`sed -n '2p' bangou.txt` kkk=`sed -n '3p' bangou.txt` #declare -i $kkk if [ "$kkk" = "$iii" ] then echo "$iii" else echo "$kkk" fi done どこか基本的なところで間違えているのかと思うのですが初心者なので よくわかりません。 わかる方がいらっしゃったら教えていただけないでしょうか。

  • シェルスクリプト ファイルパス違いによって実行結果が違う 比較

    シェルスクリプト(bシェル)を作成しています。fileA.txtの中身を一行ずつ読み込んで、fileB.txtと比較を行うプログラム(sample.sh)です。 設定しているファイルのパスの違いによって実行が出来るものと出来ないものがあり、その原因がわかりません。 【1】自分のホームディレクトリ(MyDIR)にすべてのファイルを置いている FILEA=/home/MyDIR/TEST/fileA.txt FILEB=/home/MyDIR/TEST/fileB.txt while read line do grep -v "$line" "$FILEB" done < $FILEA  このプログラムは正常に実行できます 【2】FILEA,Bを/tmpの下に作ったTESTディレクトリの下に置いている sample.shは/home/MyDIR/TESTの下、fileA,Bは/tmp/TESTの下。 set FILEA=/tmp/TEST/fileA.txt set FILEB=/tmp/TEST/fileB.txt while read line do grep -v "$line" "$FILEB" done < $FILEA  ファイルのパスをこのように変更すると、while:構文が間違っています。というエラーが出て実行できません。whileの中に入れていないようです。スペルミスはありませんし、パスが違うだけでなぜ実行が出来なくなるのでしょうか? よろしくお願いします。

  • 【シェル】ループの中で対話処理をしたい

    unix上でシェルを書いています。 ループ内で対話形式で処理をしたいのですが、入力待ちとならないままループしてしまいます。 ループの中で、キーボードからの入力があるまで処理を待たせることは可能でしょうか。   test.txtの内容*** 花子 太郎 二郎 三郎   *************** このテキストを読み込んで年齢を入力してもらうという処理です。 読んだ後の処理はここでは省略します。 while read line; do    echo $line "この人の年齢を入力して下さい。"    read ymd            if [ "$ymd" = "" ]; then      echo "未入力です!"      exit 0        fi done < test.txt これを実行すると、入力をまたずに未入力、未入力、未入力…と標準出力されます。 1行読んだら、年齢を聞いて、入力があるまでは"read ymd"の処理を行わない、という ようにする方法をどうかご教授願います。

  • シェルスクリプトでファイルの読みとり

    /etc/ldap.confからpam_passwordで始まる行を見つけてその行を書き換えて上書きする関数を作ろうとしているところです。 以下のようにしましたがデバッグのためのechoでの出力が見えませんでした。 echoで1行ずつ列挙されるのを確認したいのですがどうしたらよいですか? function func1 { while read LINE ; do echo $LINE done < $1 return "" } buf=`func /etc/ldap.conf`