• ベストアンサー

hcdって何でしょうか?

シェル初心者です。 どなたか教えて下さい。 現在シェルの解読しています。  cat ${ファイル名} | while read hcd bcd fn これが何をしているのか解りません。 ファイルをどういう風に読込んでいるでしょうか?

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

  • ベストアンサー
  • e_watt
  • ベストアンサー率71% (25/35)
回答No.1

bashの場合ですが ファイルを1行ずつ、 区切り文字($IFS に設定されている。 デフォルトでは空白|タブ|改行)で分割して、 順に $hcd, $bcd, $fn に代入しています。 (3つ以上に分割できるときは、3番目以降の要素は全部 $fn に入る) 'hcd'という名前自体はそのスクリプトを書いた人が決めたもので、 cat しているファイルの各行の先頭の単語の意味が、 hcd と名付けるのにふさわしいものなのでしょう。 (bcd, fn も同様)

street-beat
質問者

お礼

大変役に立ちました。ありがとうございました。

関連するQ&A

  • 【シェルスクリプト】 ローカル変数、グローバル変数

    シェルスクリプトのローカル変数、グローバル変数の取り扱いで迷っています。 ---------------- #!/bin/bash count=0 cat file | while read i do count=`expre $count + 1 ` done echo $count ---------------- fileの中身をcatで流して、それを一行ずつ読み込みます。 そのつど、count の値を増やしていくようにしたいのですが、最後の出力値は0となります。 cat→whileで読み込ませて処理している間はローカル変数として扱われているのでしょうか。 またそうであるならば、シェルスクリプトでグローバル変数を明示的に宣言するにはどうのようにすればいいのでしょうか。

  • ファイルA、ファイルBの各々1行ずつをreadして結合するシェル

    シェル初心者です。 ファイルA、ファイルBの各々1行ずつをreadして結合するシェルを作りたいのです。 ファイルA:  1 2 3 4 5 6 ::::: ファイルB: 7 8 9 10 :::: 結果の結合ファイル: 1 2 3 7 8 4 5 6 9 10 :::::::::: :::::::::: 各ファイルは、列数(=フィールド数)が異なりますが、行数は同じです。 while ~ read のループでは、うまくいきませんでした。 どなたか、よろしくお願いします。

  • bashのwhileとshiftについてです。

    いまシェルスクリプトで引数に複数のファイルの絶対パス(複数)を受け取り、それらのファイルを順番に処理しwhileを使い、引数の個数が0より大きいなら、以下の処理を繰り返します。 以下の処理(*1)というのは シェルスクリプトの引数にファイルの絶対パスを受け取り、そのファイルの行数を数えます。 受け取った絶対パスのなかか らファイル名だけを取り出し、その後ろに、_行数を追加したファイル名を作ります。 もとのファイルを、現在居る場所に、新しく作った ファイル名でコピーする。 そしてそのファイルが10000バイト以上なら、コピーしたファイルをgzipで圧縮する。 というものです。こちらはできたのですがwhileとshiftの所が出来ません。 自分が書いたシェルスクリプトを実行すると "syntax error near unexpected end of file というエラーが出てきます。このエラーは最後がしっかり閉じれていないということでしょうか? またシェルスクリプトはこのように書きました。 >while [$# -le 0] >以下の処理(*1) >shift >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

  • csh foreachで「*」でエラーとなる

    シェルの初心者です。よろしくお願い致します。 cシェル(csh)で、リストをforeachで1行ずつ取得しているのですが、「*(アスタリスク)」の値があると「一致しません」とエラーで落ちてしまいます。 「*(アスタリスク)」も正常に読んで、ループを回すことはできないのでしょうか? foreach FILE ( \"`/bin/cat リストファイル名`\" ) リストは「|(パイプ)」区切りにしてあります。 foreachで一行ずつ、読んでループしています。 ご存知の方は、お力をお貸し下さい。 よろしくお願い致します。

  • 名前付きパイプを使い文字列をブロードキャスト

    名前付きパイプを利用して、文字列をブロードキャストしたいと考えています。 --- シェル1$ cat > fifo --- シェル2$ cat fifo --- シェル3$ cat fifo --- のような状態で、シェル 1 で hello と入力し、Enter キーを押下すると、シェル 2 およびシェル 3 に hello と表示させたいのですが、実際にはシェル 3 (後から fifo を開いたシェル)にしか印字されません。 シェル 1 にて入力を終了(EOF送信)すると、シェル 2 、シェル 3 ともにファイルがクローズされ、cat が終了しているので、EOF は両方ともにブロードキャストされているようにも見え、動きが不可解です。 Q1) 名前付きパイプ fifo は、その名のとおり、「早い者勝ち」でデータを取得した方にしかデータが流れないんでしょうか。 Q2) その場合、親子関係なくプロセス間で、複数のプロセスに対して同一の文字列をブロードキャスト方法は、どのようにすればスマートでしょうか。 一度、通常ファイルに出力を書き込み、全プロセスが文字列を取得した事を監視してキューを削除する、みたいな方法は可能だと思いますが、これよりも良い方法があればお教えください。

  • (UNIX)後ろのスペース出力について

    UNIXのコマンドで、catで読み込んだ行をwhile文でファイルに出力しているのですが、その際に後ろのスペースを消さずに出力するにはどうすれば良いのでしょうか? 以下のような処理を行っています。 cat $infile | read LINE do echo "$LINE" >> $outfile done <$infileの内容> 1 10 100□□□□□□ 2 20 200□□□□□□ ・・・ 以上となります。よろしくお願いします。

  • 環境変数IFSについて

    シェルスクリプトでテキストファイルを1行ずつcatで読み込みたいです。 そのため、IFSに¥nを設定して、 読み込み終わったら元に戻すようにしました。 そこで1点気になった事があります。 このシェルスクリプトが動いている間、 他のプロンプトでcatを叩いても1行ずつ読み込んでしまいますか? もしそうであるなら、このシェルスクリプトのプロセス内だけ、catで1行ずつ読み込むにはどうしたらよいのでしょうか。 どなたかご教示お願いします。

  • 複数ファイルを1つにするシェルスクリプト

    file.1 file.2 ..... file.xx とxxが連番になっている複数のテキストファイルがあります。 これを1つのファイル"file.all"にするために以下のシェルスクリプトを作ってみました。 (公開するのも恥ずかしいのですが...^ ^;) #!/bin/sh i=1 while [ $i -le 99 ]; do  cat file.$i >> file.all  let i=i+1 done これだと99までのファイルしか指定できません。 99999...とループ回数を増やせばいいのですが、 それよりももっとスマートにやる方法があるのではと思い質問を投稿いたしました。 シェルスクリプトではなくコマンドによる方法でも結構です。 (RH7.3を使っています) よろしくお願いします。

  • ファイル内の改行を削除し1行にするシェル

    お世話になっております。 ファイル(テキスト)内には、改行を含んだ複数の行が記述されています。 これを1行にして上書き保存するシェルを実行をするための シェルを作成したいと思っています。 ファイル内には以下のような値が改行を含んで入っています。 123 456 789 →これを、「123456789」と改行を取り除き、既存のファイルの上書き保存をしたい なお、改行を含んだ対象のファイルは、ファイル名にある文字を含む ファイルのみに対して行いたいのですが。 例:ファイル名に、「*abc*」、「*def*」、「*xyz*」を含むファイルが対象 改行を取り除くコマンドはわかるのですが、シェルにするプロセスがわかりません。 cat 入力ファイル名 | tr -d '\n' > 変換後の出力ファイル名 ご教授いただきたく、よろしくお願いします。