1

~80,000 行を含むファイルに問題があります。23Gbの大容量ファイルです。次のコマンドを使用して、そのサイズの同様のファイルをチャンクアップすることができました。

awk '{fn = NR % 24;  print > ("file1_" fn)}' file1

ただし、このコマンドは、この 1 つの問題のあるファイルで停止します。問題のファイルには 30 億文字の非常に大きな行があり (他のファイルの最長行は 10 億未満)、これが問題であると推測しています。

この長い行をファイルから削除して続行したいのですが、これは難しいことがわかっています。私は単に以下を使用するだけでうまくいきます

awk 'length < 1000000000' file1 > file2

ただし、これも 3.5 時間後も実行されています。ファイルを調べて、行の文字数のカウントがたとえば 10 億を超えた瞬間に、カウントを停止して次の行に移動する簡単な方法はありますか?

4

2 に答える 2

1

2つのawk行を1つのコマンドに結合しようとすると、より高速になる可能性があります。なぜなら、それはあなたのモンスターファイルを一度だけ処理するからです。しかし、あなたはテストしなければなりません。

awk '{fn = NR % 24;  if(length< 1000000000) print > ("file1_" fn)}' file1
于 2013-03-18T10:41:32.283 に答える
0

sed を使用して、特定の文字数を超える行を削除してみてください

# delete lines longer than 65 characters
sed  '/^.\{65\}/d' file

2 段階のアプローチを使用することもできます。

# use sed to output the line numbers containing lines
# longer than a certain number of characters
sed -n '/^.\{65\}/=' file

次に、そのリストを使用して awk でスキップ リストを作成します。つまりNR、これらの数値のいずれかに等しい場合は、その行をスキップします。

于 2013-03-18T12:33:30.593 に答える