awkを使用してテキストファイルの最初の6行/行をスキップする


39

テキストファイル(input.txt)の最初の6行/行をスキップし、残りをawkで処理するにはどうすればよいですか?私のawkスクリプト(program.awk)の形式は次のとおりです。

BEGIN {
} 

{ 
process here
} 

END {

}

私のテキストファイルは次のようなものです。

0
3
5
0.1 4.3
2.0 1.5
1.5 3.0
0.3 3.3
1.5 2.1
.
.
.

次から始まるファイルを処理したい:

0.3 3.3
1.5 2.1
.
.
.

回答:


59

次の2つのパターンのいずれかを使用します。

NR>6 { this_code_is_active }

またはこれ:

NR<=6 { next }
{ this_code_is_active }

awkの引数として多くのファイルがあり、すべてのファイルで6行をスキップする場合は、NRではなくFNRを使用します。


29

試してください:

awk 'FNR > 6 { #process here }' file

4
良い!しかし、なぜこれが優れているのか説明しませんでした-複数のファイルの場合FNRは各ファイルの行番号でNRあり、入力全体の番号です(パイピングの場合は問題ありません)
トマスガンドール

3

また、先頭の行の任意の数や使用して、ファイルの末尾スキップすることheadtailプログラムを。

具体的な質問については、

tail input.txt -n+7 | program.awk

あなたのprogram.awkファイルが実行可能であるならば、そうします。それ以外の場合は、使用できます

tail input.txt -n+7 | awk -f program.awk

これにより、各行の比較を省くことができ、AWKコードのロジックを変更する必要がありません。

tail 7行目からテキストのストリーミングを開始し、最初の6行をスキップします。

これは、特にキャッシュのおかげでテキスト処理が簡単な場合、パフォーマンスに大きな影響はありません。ただし、クラウド環境で長いファイルを繰り返し使用する場合は、コストを節約できます。


正しいですが、経験則として、1つのツールだけで簡単にできる場合はパイピングを避けてください。数行を削除するためだけに、両方のコマンドをパイピングする巨大なテキストファイルを考えてください。
フィリポス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.