- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプトについて)
シェルスクリプト: 1行目と3行目を比較するスクリプトを作成できない
このQ&Aのポイント
- bangou.txtには数値が入っており、1行目と3行目を比較するスクリプトを作成しようとしていますが、うまく動作しません。
- 作成したスクリプトは1行目の数値をiiiとして取得し、2行目の数値をjjj、3行目の数値をkkkとして取得しています。
- kkkとiiiを比較して一致する場合はiiiを、一致しない場合はkkkを表示するようになっていますが、うまく動作していません。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
まず、・・・ for 文ではリストから項目をひとつずつ取り出し、指定した一時変数に格納して処理を行なうことができます。 for 一時変数名 in リスト do 処理内容 done 今回の場合、上記の "リスト" の部分が、 `sed -n '1p' bangou.txt` になっています。 これでは、 'bangou.txt' のファイルの先頭レコードだけしか処理の対象にならないので、この部分を `cat bangou.txt` などのようにしてみてください。 これで、'bangou.txt' の全てのレコードが処理の対象となります。 それから、値を設定する際に、 jjj=`sed -n '2p' bangou.txt` としていますが、これだけでは、未完です。 jjj=`sed -n '2p' bangou.txt` export jjj としてください。
お礼
早速の回答ありがとうございます。修正して少し動作を確認しましたけどなんとかなりそうです。 また月曜日に本格的に動作確認させていただきます。 本当にありがとうございました。
補足
DIooggooID様。先週はありがとうございました。 今日、時間があったので試してみました。ご指摘の点を修正してちょっとスクリプトを変えてみたのですがうまく動作しません。 #!/bin/bash for iii in `cat bangou.txt` do jjj=`sed -n '2p' bangou.txt` export jjj kkk=`sed -n '3p' bangou.txt` export kkk if [ "$iii" = -n ] then echo "$kkk>/dev/null else echo "$jjj > jjj.txt paste jjj.txt toku.txt > toku2.txt rm -rf jjj.txt fi done vi上で見るとforのところが反転しているのでfor文が基本的に間違っているのではないかと思うのですがよくわからないです。 助けて下さい。お願いします。