特定の文字列を含む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
テストが「通過」したときに「ジョブ」がなく、各行を印刷する「モード」がなく、すべての行が印刷されることを意味します。