- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Kシェルでの read line と awk)
Kシェルでのread lineとawk
このQ&Aのポイント
- AIXの標準kshellでrecode.txtの中身を参照し、test.txtから該当する文字列を読み込む方法について質問があります。
- recode.txtとtest.txtは編集可能で、空白やタブを無視して読み込む方法を知りたいです。
- 現在のコードには文法エラーがあり、処理がうまくいかない問題が発生しています。どの部分が原因かを特定したいと思っています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
thenとelifの間に何も無いからですね。 then ; elif とか then true elif とかのように、何もしない命令を入れれば、kshとしての文法エラーは消えるはずです。 ただ、それだけでは正常に動作しません。 awk '{print $1}' ${line} これは、質問にある例なら awk '{print $1}' AAAAA になりますが、これは、$1=AAAAAとして、print $1をする、のではありません。 「AAAAA というファイル」を読みこんで、各行について{print $1:}を実行しようとします。 AAAAAというファイルが無ければ、エラーです。 ・このままawkの$1に入れたいなら echo ${line} | awk '{print $1}' とか ・awk '{print $1}' test.txt | while read line 等と、readする段階で加工済みにしておくとか ・必要なところだけ抜き出すのもawkでやってしまうとか awk '必要なとところだけ抜き出すスクリプト' | while read line ; do test2.ksh ${line} ・全部awkでやってしまうとか
お礼
ありがとうございます! なるほど、空だと構文エラーになっちゃうんですね。 バッチ?か他の場合だと上手くいっていたのですが、kshellだと結構厳密なのですね……。 true を入れたら回避出来ました! awk については、御指導ありがとうございます。 なるほど、ファイルに対しての操作なのですか……勉強になります。 >awk '{print $1}' test.txt | while read line これを使用させていた所、上手くいきました! while だと毎回テキストからの読み込みだったのですが、先頭で渡せるのですね。 良く考えれば、やってることは一緒なのですが……応用性がなかったようです orz がんばって勉強したいと思います。 何はともあれ、大変助かりました。 年末にもかかわらず、ありがとうございました!