行7から13の間に特定の文字列を含む内容を印刷します(awkスクリプト)。

行7から13の間に特定の文字列を含む内容を印刷します(awkスクリプト)。

特定の文字列を含む7から13行の間の行を印刷するスクリプト(.awk)を作成しようとしています。部分的に動作しますが、7から13の間の行だけでなく、その文字列を含むすべての行を印刷します。

#!/usr/bin/awk -f
BEGIN { (NR>=7) && (NR<=13) }
/word/ {print $0}

ランタイム出力

script.awk filename

次の単語を含むすべての行。

編集する:

ジェフの提案を試した後、私は彼のアドバイスを得ました。 /needle/ このキーワードです。

パスワード パスワード 解決しました!

問題は、他の言語に慣れているので、別の行に{print $ 0}があることです。コードを分離するのが大好き

ベストアンサー1

実行する「BEGIN」ブロックに行制限ロジックを配置しました。今後 awkすべてのデータを読んでください。このロジックを基本ループに移動します。

NR >= 7 && NR <= 13 && /word/ { print }

$0指定されていない場合はデフォルトのprint引数です...またはより短いです。

NR >= 7 && NR <= 13 && /word/

指定しない場合、それ以降は{print}デフォルト操作です。スクリプト
の本文は、awk目的のタスクの前にパターンを追加したい「パターン」「アクション」の形を取ります。ここで、パターンは3つのテストがすべて真でなければならず、仕事は行を印刷することです。別の行に入れることは、printテストが「通過」したときに「ジョブ」がなく、各行を印刷する「モード」がなく、すべての行が印刷されることを意味します。

おすすめ記事