web-dev-qa-db-ja.com

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

テキストファイル(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
.
.
.
45
amatek

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

NR>6 { this_code_is_active }

またはこれ:

NR<=6 { next }
{ this_code_is_active }

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

70
Janis

試してください:

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

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

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

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

あなたのprogram.awkファイルは実行可能です。それ以外の場合は、

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

この方法では、各行の比較を省略でき、AWKコードのロジックを変更する必要はありません。

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

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

4
Dr. Windows

別のもの:

$ cat print_from.awk

#print 20 lines from line 6 (from your file: 0.3 3.3)
BEGIN{n=0}
/^0.3 3.3.*/ {n=NR; m=n+20}
{
  if (n > 1 && NR < m) {print $1} 
}

次で実行:

awk -f print_from.awk your-text-file
1
user388201