2017-11-10 12 views
0

書かれたシェルスクリプトからファイルをgrepできません。コードは以下の通りですシェルスクリプト内のある行番号から別の行番号にファイルをgrepできない

#!/bin/bash 

startline6=`cat /root/storelinenumber/linestitch6.txt` 
endline6="$(wc -l < /mnt/logs/arcfilechunk-aim-stitch6.log.2017-11-08)" 
awk 'NR>=$startline6 && NR<=$endline6' /mnt/logs/arcfilechunk-aim-stitch6.log.2017-11-08 | grep -C 100 'Error in downloading indivisual chunk' > /root/storelinenumber/error2.txt 

awkコマンドは、開始行番号と終了行番号が手動で指定されている場合でもスタンドアロンで動作します。

+0

代わりに何が起こっているのか?手動で開始行または終了行のいずれかの番号を渡してみましたか?上記を使用してもう1つを決定しましたか?あなたはそれを開始または終了のどちらかに絞り込むことができますか? – SpoonMeiser

+0

以下のコマンドを手動で実行するのと同じです。 awk 'NR> = 0 && NR <= 1000' /mnt/logs/arcfilechunk-aim-stitch6.log.2017-11-08 | grep -C 100 '個々のチャンクをダウンロードする際にエラーが発生する>> /root/storelinenumber/error2.txt 期待どおりの出力が得られました。しかし、私が動的に開始点と終了点を渡したシェルスクリプトは、error2.txtファイルに出力されていません。 –

+0

その理由は何ですか? grepにパイプしないと、出力が出ないのですか?間違った行? 'echo $ startline6'と' echo $ endline6'はあなたが期待する出力を与えますか? – SpoonMeiser

答えて

0

構文に問題がありました。最後の行は

awk 'NR>='"$startline9"' && NR<='"$endline9"'' /mnt/logs/arcfilechunk-aim-stitch9.log | grep -C 100 'Error in downloading indivisual chunk' >> /root/storelinenumber/error.txt 

に変更されました。

0

一重引用符で囲まれた変数の展開があります。つまり、実際にはになりません。になります。

awkにシェル変数を渡すとき、私はもののその種を心配する必要はありませんので、実際のファーストクラスawk変数であるためにそれらを好む:

awk -vstl=$startline6 -vendl=$endline6 'NR>=stl && NR<=endl ... 
関連する問題