テキストファイル(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
.
.
.
次の2つのパターンのいずれかを使用します。
NR>6 { this_code_is_active }
またはこれ:
NR<=6 { next }
{ this_code_is_active }
Awkの引数として多くのファイルがあり、すべてのファイルで6行をスキップしたい場合は、NRではなくFNRを使用してください。
試してください:
awk 'FNR > 6 { #process here }' file
head
またはtail
プログラムを使用して、ファイルの先頭または末尾の任意の数の行をスキップすることもできます。
具体的な質問については、
tail input.txt -n+7 | program.awk
あなたのprogram.awk
ファイルは実行可能です。それ以外の場合は、
tail input.txt -n+7 | awk -f program.awk
この方法では、各行の比較を省略でき、AWKコードのロジックを変更する必要はありません。
tail
は、7行目からテキストのストリーミングを開始し、最初の6行をスキップします。
これは、特にキャッシングのおかげでテキスト処理が単純な場合は、パフォーマンスに大きな問題にはなりません。ただし、ファイルが長く、クラウド環境で繰り返し使用すると、コストを節約できる場合があります。
別のもの:
$ 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