31

n 行ごとに取得して行に出力する必要がある非常に巨大なファイルがあります。

私のデータ:

1      937  4.320194
2      667  4.913314
3      934  1.783326
4      940  -0.299312
5      939  2.309559
6      936  3.229496
7      611  -1.41808
8      608  -1.154019
9      606  2.159683
10     549  0.767828

データを次のようにしたい:

1      937  4.320194
3      934  1.783326
5      939  2.309559
7      611  -1.41808
9      606  2.159683

これはもちろん一例です。巨大なデータ ファイルを 10 行ごとに表示したいのです。私はこれまでにこれを試しました:

 NF == 6 {
     if(NR%10) {print;}
     }
4

5 に答える 5

62

最初の行から始めて 2 行おきに印刷するには、次のようにします。

awk 'NR%2==1' file.txt

10 行目から開始して 10 行ごとに印刷するには、次のようにします。

awk 'NR%10==0' file.txt

これをスクリプトで使用するには、次を というファイルに追加しますscript.awk

BEGIN {
    print "Processing file"
}

NR%10==0

END {
    print "Finished processing"
}

次に実行します。

awk -f script.awk file.txt
于 2012-04-01T22:34:01.623 に答える
17

を使用sedすると、コマンドを使用して非常に簡単にさまざまなバリエーションを実行できますfirst~step。例えば:

# Odd lines
sed -n 1~2p file
# Every tenth line (10, 20, 30, ...)
sed -n 10~10p file
# Every tenth line (1, 11, 21, ...)
sed -n 1~10p file
# First plus every tenth (1, 10, 20, 30, ...)
sed -n -e 1p -e 10~10p file
于 2012-04-01T23:30:37.090 に答える
9

ケーキ:cat test.txt | awk 'NR % 10 == 1'

于 2012-04-01T22:36:40.373 に答える
2

(g)awk ではありませんが、動作します:

cat myfile | grep ^[[:digit:]]*0[[:blank:]]トリックを行う必要があります。

于 2012-04-01T22:31:44.603 に答える