非常に大きなファイルがあり、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;}
}
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
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
ケーキ:cat test.txt | awk 'NR % 10 == 1'
(g)awkではありませんが、機能します。
cat myfile | grep ^[[:digit:]]*0[[:blank:]]
トリックを行う必要があります。
コマンドプロンプトで直接行う(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行目を元のファイルから新しいファイルに出力します。