.csvでサンプル行を出力する方法は?

.csvでサンプル行を出力する方法は?

私は多くのデータマージ印刷を行っており、大規模なデータベースから10個のサンプルを出力できるようにしたいです。私の目標は、提供された.csv(最初の行と最後の行を含む)から均等な間隔の10行を抽出して新しい.csvファイルに出力することです。

ベストアンサー1

この回答では、csvファイルに1行に1行があるとします。つまり、連続した行がないことを意味します。ファイル名がある場合は、db.csv次のコマンドを使用して最初の行と最後の行を含む10行を取得できます。

awk 'FNR==NR{next} FNR==1{n=NR-1} FNR>x || FNR==n{x+=n/9;print}' db.csv db.csv

どのように動作しますか?

csvファイルはコマンドラインに2回表示されるため、awk2回読み取られます。最初は、行の総数を取得するために使用されます。 2番目の時間は、選択した10行を印刷するために使用されます。

  • FNR==NR{next}

    NRこれまでに読み取ったレコード(行)の総数。ファイルレコード番号は、FNRこれまでこのファイルから読み取ったレコード(行)の総数と同じです。それで、当時FNR==NR私たちはまだ最初のファイルを読んでいました。もしそうなら、nextレコードに移動します。

  • FNR==1{n=NR-1}

    このコマンドに到達すると、2番目の読み取りの最初の行にあることを意味します。この場合、ファイルの総レコード数があることがわかりますNR-1。この番号をn

  • FNR>x || FNR==n{x+=n/9;print}

    2行目の最初の行を読みFNR==1x=0。だからFNR>x我々はその行を印刷します。その後、一度に1行ずつ増やしてx印刷します。n/9FNR>x

    この条件をFNR==n使用すると、ファイルの最後の行が印刷されます。

はい

101行のファイルを作成しましょう。

$ seq 101 >db.csv

次のコマンドを使用して、awkファイルの最初の行と最後の行を含む10行を印刷できます。

$ awk 'FNR==NR{next} FNR==1{n=NR-1} FNR>x || FNR==n{x+=n/9;print}' db.csv db.csv
1
12
23
34
45
57
68
79
90
101

おすすめ記事