- ベストアンサー
テキストファイルをwhileでブロック毎に処理がしたいのです。
テキストファイルをwhileでブロック毎に処理がしたいのです。 シェルスクリプトにてlinuxコマンドを使用し行いたい処理で御座います。 例 func(){ #ブロックでの処理 awk ~~~~~~ } while do sed -n -e 'スタート行,/^特定文字/p' source.txt func() done 特定文字は必ず出現し、ブロック処理を行った後特定文字の次の行がスタート行となりループを させたいのですが、どうしてもやり方が解らずめげています。 御手数お掛け致しますがどなたか教えて頂けると幸いです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
案1:func()の中はawkのようなので全部awkで処理する awk 'BEGIN{RS="\r特定文字\r"}{ブロックの処理}' 案2:funcの処理とwhileループを一緒にする 案3: block= while read line do case "$line" in 特定文字*) echo "$block" | func ; block= ;; *) block="$block"$'\n'"$line" ;; esac done
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10359)
No2です。 >テキストファイルから特定文字から特定文字まで1ブロックずつ抽出する処理を望んでおります。特定文字から特定文字までは複数行となります。 了解してますよ。 data1 data2 data3 @ data10 data11 @ だとして、最初はdata1~data3の3行をfuncに渡して、次にdata10~data11の2行をfuncに渡すんですよね? それに対しての回答です。
お礼
よくソースを理解せずに返答してしまい申し訳御座いません。 お陰さまで出来るようになりました!有難う御座いました!
- Tacosan
- ベストアンサー率23% (3656/15482)
自分ならあきらめて Perl で書いてるかな.
補足
PerlやCでは出来たのですが、どうやら私はコマンドが正規表現が苦手なようです。(泣) 諦めたらそこで試合終了という言葉が頭をよぎり、諦めることができません。
補足
御回答有難う御座います。 回答内容ですが、私の説明不足により 望んだ回答ではなかったようです。 テキストファイルから特定文字から特定文字まで1ブロックずつ抽出 する処理を望んでおります。特定文字から特定文字までは複数行となります。