私はこの問題を経験しており、オンラインで検索しても結果がないので、ここで助けを求めたいと思います。
約80,000,000行のファイルがあります。私の使命は、それらをそれぞれ500,000行のファイルに分割することです。いいですね。私が使用するコードは次のとおりです。
#split -l 500000 myfile segment
質問1:ところで、その後は具体的な業務があります。元のファイルの最初の行はですID
。この行を上部のすべてのパーティションファイルにコピーする必要があります(すべてのパーティションファイルの最初の行にこのID行があるように)。
私はコードを試しました:
#sed -n 1,1p originalFile >> splitFile
何とか作業を行いますが、ID
各分割ファイルの一番下に行を追加します。ID
各分割ファイルの一番上(最初の行)にこの行を配置するコードがあれば幸いです。
質問2(btw)。私は薬を持っています。 170個の分割ファイル。各分割ファイルの上部にID行を追加するループを作成できますか?
すべての提案に感謝します!
ベストアンサー1
注文
$ sed -n "1,1p" originalFile >>splitFile
splitFile
>>
シェルに通知するために Since の末尾に ID を追加します。追加ファイルにストリーミングします。終了する前にsed
8000万行がすべて処理されるため、速度も非常に遅くなります。originalFile
分割すると、xaa
等の名前で約160個のファイルが生成されます。ソースファイルのヘッダーを段階的にこのファイルに追加しましょうxab
。xac
head -n 1 originalFile >id_line.txt
for f in x??; do
cat id_line.txt "$f" >tmpfile && mv tmpfile "$f"
done
rm id_line.txt
最初のコマンドは最初の行をoriginalFile
独自のファイルに抽出しますid_line.txt
。
split
このループはデフォルトのプレフィックスなどを使用したと仮定し、生成されたすべてのファイルを繰り返し、id_line.txt
分割ファイルを名前付きファイルにリンクしますtmpfile
。成功したら、tmpfile
分割ファイルを置き換えます。
最後の行はid_line.txt
今、その目的を達成したものを削除します。