• 締切済み

シェルスクリプトでのスプリット

bshでのスプリットはどのようにするのでしょうか? ファイルAには、スペース区切りで以下のデータが入ってます。 # cat fileA parameter1 parameter2 parameter3 parameter1x parameter2x parameter3x ....... .. 上記のファイルでparameter2の部分(真ん中のデータ)を 取得するには、どのようになりますか? 以上宜しくお願いします。

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.4

Oops. 訂正どうもです>#3 といいつつ 1点突っ込むと「script」って名前は危険です. script コマンドが実行されたら目も当てられない.

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

No2の回答に補足します。 readコマンドは標準で標準入力を処理しますので、スクリプト中で一つのデータファイルを扱う場合にはNo2のスクリプトを下記の方法で実行すれば 良い(手軽)でしょう。 ※ echoの引数は変数ですから$が抜けてましたが % cat fileA | script スクリプトの中で複数データファイルを読み込みたい場合や読み込むデータ ファイルのファイル名がfileAと決まっている場合には while read column1 column2 column3; do echo $column2 done < fileA とファイル名を指定して読み込めば良いでしょう。 標準では区切り文字が空白文字の設定になっていますが、変数IFSに区切り 文字を設定すればカンマ区切り等のデータも扱えます。 Ex. IFS="," while read column1 column2 column3; do echo $column2 done < fileA 組み込みコマンドsetを用いれば同様のフィールド分割が可能ですので、 データを加工し、加工後文字列の2カラムと4カラムを取り出す様な事も できます。

全文を見る
すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

while read column1 column2 column3; do echo column2 done とか? 「bsh での」と書かれたので bsh の機能だけ.

全文を見る
すると、全ての回答が全文表示されます。
  • tostem41
  • ベストアンサー率38% (7/18)
回答No.1

bshは詳しくありませんが… スプリットコマンドはファイル分割コマンドと思います。例)ファイルAを3分割にしたい等 今回のように空白で区切られたレコードの2フィールド目を抽出したいのであればcutコマンドを使用すれば特定フィールドの抽出できます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • splitについて教えていただきます

    もし、区切り記号は","なら、下記(1)ように書けば結構ですが、今のデータは(2)のようなものです。つまり区切り記号は" "(スペースではなく、TABです)です。 どう書ければ良いですか。 (1) a = split("abc,def,123", ",") | |_ 区切り記号 |_ データ列挙 (2) あ い う え お 以上、宜しくお願いいたします

  • 任意の区切り文字でsplitする方法

    VBAで任意の区切り文字でsplitする方法を教えてください。 例えば 123 456 789 333 3444 66 65 22 といようなスペースあるいはタブで区切られたテキストデータがあるとします。 これを配列に格納したいのですが、 この区切りがタブ一つとか、スペース一つとか決まっていれば split関数で簡単に配列に格納することができますが、 タブかも知れないし、スペースがかも知れないし その数も未定の場合にはどうしたら良いですか? replace関数を使って、まず全てのタブをスペースに変換し その後に、複数のスペースを一つのスペースに変換し 最後にsplit関数を使うという方法しかないでしょうか? もっとスマートな方法があれば教えてください。

  • VBA  改行でsplitしたい

    現在ウェブページから取得した文字列を改行部分でsplitして配列にしたいと考えています。 ob10-6<br /> this is test data ↑このような文字列を取得し、<br />部分で分割したいのですが、 この文字列がtmpという変数に入っているので、 x = split( tmp,"<br />") により、配列xの中に入れようとしたところ、どうも<br />部分で分割されていないようなのです。 vbCrLfなどを代わりに使用してみましたが分割できません。。 なぜ分割できないか、また、分割の仕方を教えていただけると幸いです。 よろしくお願いいたします。

  • シェルスクリプト作成方法

    教えてください。 (1)起動   ↓ (2)指定したファイルを見に行く   ↓ (3)1行データ取得   ↓ (4)日付の部分だけを別ファイルに保存。   ↓ (5)終行まで続く。   ↓ (6)終わり 以上、よろしくお願いします

  • splitが思うように動きません助けて下さい。

    文字列から、明細と金額にわけてそこから検索できるプログラムを作っています。 テスト用に下記サンプルを作ったのですが、検索明細($moneyvalue)をコーヒーに した場合のみ、値が戻ってきませんでした。 そこで、中のsplit部分を表示するようにしたところ ★収入=-10000. ★電車=+1000. ★コ=. ★[ヒ=. ★[=+2000. ★雑誌=+240. ★=. ★その他=+500. 0 このように コーヒーの部分だけ上手くsplitが動いていないことが分かりました。 しかしココから手詰まりでどのように直せばいいのか分かりません。 想定される結果 ★収入=-10000. ★電車=+1000. ★コーヒー=+2000. ★雑誌=+240. ★その他=+500. 2000 このようにするにはどうしたらいいのか、分かる方おりましたら教えて下さい。 なお、当方はperl初心者です(涙) ----以下サンプルコードです---- #! /usr/local/bin/perl use Encode qw(encode_utf8); use CGI; my $moneyvalue = "コーヒー"; my $moneyline = "収入-10000,電車+1000,コーヒー+2000,雑誌+240、その他+500"; print &chkmoneyValue($moneyline,$moneyvalue); exit; #==============================================================================  sub chkmoneyValue { my ($moneyline , $moneyvalue)=@_; my $lp=0; my $flg=0; my @data= split(/[、,]/, $moneyline); my $datavalue = 0; foreach my $wdata (@data) { $wdata =~ s/\+/\,\+/; $wdata =~ s/\-/\,\-/; my @data2 = split(/[,]/, $wdata); print "★$data2[0]=$data2[1].\n"; if($data2[0] eq $moneyvalue){ $datavalue=$data2[1]; last; } } return $datavalue; }

    • ベストアンサー
    • Perl
  • 【シェルスクリプト】各ディレクトリで一番大きな数字

    シェルスクリプト(Ubuntu bash)にて 以下の様なディレクトリ構成で各ディレクトリで一番数字の大きなファイルのパスを取得したいです。 data --0001 ----1 ----2 ----3 --0002 ----1 ----2 --0003 ----1 結果としてはこのように表示したいのですが、良い方法はありませんでしょうか。 data/0001/3 data/0002/2 data/0003/1

  • UNIX シェルスクリプト 文字列操作について

    あるシェルスクリプトを作成しなければいけないのですが、あまりシェルに詳しくないのでご教授いただけると助かります。 Linux上で以下のようなIDごとに定義してあるテキストファイルがあり ます。 ※2000IDほど記載してあります。 cat sample.txt --------------- ID=00001 parm=xxxxx flag=0 path=xxxxx --------------- ID=00002 parm=yyyyy flag=1 path=yyyyy --------------- ID=00003 以下略--- 上記の定義ファイルをID単位でエクセルの表に纏めたいので、以下のような横並びのCSVファイルに出力させるシェルスクリプトを作りたいのですが、どうかご教授いただけると助かります。 スクリプト実行後イメージ cat result.csv 00001,xxxxx,0,xxxxx 00002,yyyyy,1,yyyyy 00003 -----略-----

  • シェル(bsh)でのprintfに関して

    シェル(bsh)でのprintfに関して 配列関数内のデータを「printf」等で、ソートし出力したいと考えております。 配列関数内のデータ数が一定ではない為、多めにし以下の様にすると、 作成されたファイルの右側の方にはその分スペースが追加されてしまいます。 --------------------- # echo ${testfile[*]} AA BB CC DD EE printf "%10s %10s %10s %10s %10s %10s %10s\n" `echo ${testfile[*]}` > testfile ' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ← 最大より多めにしておく --------------------- 「testfile」をテキストとして開いたり、vi等で見るとスペースが入ってしまう。 行いたいことは、以下2点です。 ・スペースが入らないようにしたい。 ・出来れば「for」や「while」等を利用し、配列関数内の数だけ「printf」等にて指定したい。  ※見た目や予想より多くデータがあった場合の対策 「printf」に「-v」オプションを指定するとよい。等の記述は調べていた所あったのですが、 現状の環境では指定できないオプションの様です。 恐れ入りますが、知恵をお借りできないでしょうか。 以上、よろしくお願い申し上げます。

  • 【Windows】バッチスクリプトについて

    FTPサーバからデータを取得するバッチスクリプトを構成しようと思っています。 データ(ファイル)を2回取得し、1回目と2回目のデータ(ファイル)が同じかどうかのチェックし FTPサーバ上のデータ(ファイル)を削除するスクリプトを 以下手順で作成しようと思います。 1.環境変数の設定。 2.startログ出力 3.環境設定ファイル有無チェック 4.環境設定ファイル正当性チェック 5.環境設定ファイルから値の抽出 6.データ受信(1回目)パラメータファイル作成 7. データ受信処理の実行 8.データ受信処理の結果確認 9.作業フォルダ作成 10. データ受信(2回目)パラメータファイル作成 11.7~8と同じ 12.データチェック 13.FTPデータ削除用パラメータファイル作成 14.FTPデータ削除処理 15.FTPデータ削除処理結果の確認 16.rcv.dat作成 17.エラー処理 18.オリジナルデータをバックアップ 19.パラメータファイルをバックアップ 20.ログファイルをバックアップ 21.直近n回分を残して、バックアップファイルを削除 22.後処理(処理データのクリア)※念のため 23.endログ出力 ご参考までに、大まかなスクリプトをご教示いただければと思います。 とても大雑把な質問ではございますが、宜しくお願い致します。

  • シェルスクリプト外部からのデータ参照

    初心者で失礼があれば申し訳ございません。 お力を頂ければ幸いです。何卒よろしくお願いします。 以下に「hogehoge.nic」と「hogehoge.df」という外部ファイルがあります。 $ cat ./hogehoge.nic nic="210.175.250.212" $ cat ./hogehoge.df /dev/mapper/VolGroup00-LogVol00 /dev/hda1 tmpfs ====================================================================== 上記を呼び出したいシェルがあります。 $ cat ./hogehoge.sh #!/bin/sh NIC=/home/user/hogehoge.nic DF=/home/user/hogehoge.df echo ${NIC} echo ${DF} DF=`df -k` echo test df echo ${DF} ====================================================================== 実行結果 $ ./hogehoge.sh /home/user/hogehoge.nic /home/user/hogehoge.df test df Filesystem 1K-ブロック 使用 使用可 使用% マウント位置 /dev/mapper/VolGroup00-LogVol00 234410632 1869312 220441736 1% / /dev/hda1 101086 12004 83863 13% /boot tmpfs 516860 0 516860 0% /dev/shm ======================================================================= 上記実行結果ではなくて、hogehoge.shでhogehoge.nicとhogehoge.dfの中身を呼び出したい。 下記ファイルの中身を呼び出したいです。 $ cat ./hogehoge.nic nic="210.175.250.212" $ cat ./hogehoge.df /dev/mapper/VolGroup00-LogVol00 /dev/hda1 tmpfs

このQ&Aのポイント
  • 電源を落としたら、ブラザー製品 L3770CDW の電源が入らなくなってしまいました。
  • パソコンやスマートフォンのOSは何か、接続方法は無線LAN、関連するソフトやアプリはない、電話回線はひかりです。
  • ブラザー製品 L3770CDW の電源を落としたら、再度電源が入らなくなってしまいました。接続は無線LANで、関連するソフトやアプリは特にありません。電話回線はひかり回線です。
回答を見る