2

数億行の巨大なファイルがあります。最初の 6 行は次のようになります。ファイル全体が既にソートされています。

      bin1  bin2   expected                 observed
1     1     1      9.83035e-06              1
2     1     2      3.91360e-05              3
3     1     3      1.68648e-05              1
4     1     4      3.95938e-05              1
5     1     5      2.17026e-05              1
6     1     6      9.20637e-05              4

驚くべきことに、期待/観測データ フィールドが bin1:bin2 と bin2:bin1 で同じであるため、ファイルはおそらく必要なサイズの 2 倍の大きさです。つまり、1:5 は 5:1 と同じ値を持ちます。

編集

したがって、行 9581 は次のようになります

..       ..    ..     ..                       ..
9581     6      1     9.20637e-05              4

したがって、さらに分割するか、データベースにロードする前に、冗長な行を削除したいと思います。sedまたはawkでこれを行う合理的に効率的な方法はありますか? それとも、これは間違ったアプローチですか?

編集私がやりたいことは...

  1. awk を使用して各行を調べ、cbin1 > cbin2 の場合はフィールドを交換します。
  2. myfile を並べ替える | ユニーク

やり方がわからないパート1です。

どうも

4

2 に答える 2

4

あなたの編集に続いて、私はあなたが望むと思います

awk -F '\t' 'BEGIN { OFS=FS }
    $1>$2 { t=$1; $1=$2; $2=t } 1' file |
sort -u >newfile

...フィールドがタブ区切りであると仮定し、行番号がデータの一部ではないと仮定します。

于 2013-10-08T21:32:50.513 に答える