web-dev-qa-db-ja.com

gawkを使用してn行ごとに1行に出力する

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

私のデータ:

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;}
     }
23
user1269741

1行目から始めて、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
50
Steve

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
16
Kevin

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

9
Johan Kotlinski

(g)awkではありませんが、機能します。

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

2

コマンドプロンプトで直接行う(Windows)。

ファイルがあるフォルダにgawk.exeファイルを置き、そのフォルダでコマンドプロンプトを起動して、書き込みます。

gawk "NR%n==x" oldfile.txt>newfile.txt

nは印刷するn行ごとの行で、xは開始行です。

たとえば、n = 10およびx = 1の場合、行1,11,21,31,41 ......元のファイルから新しいファイルへの行を出力します。

たとえば、n = 20およびx = 5の場合、5、25、45、65行目を元のファイルから新しいファイルに出力します。

1
Nicolaj Hansen