私はこの問題を経験しており、オンラインで検索しても結果がないので、ここで助けを求めたいと思います。
約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
今、その目的を達成したものを削除します。
答え2
とても簡単です。
(head -n1 fileA.txt; cat fileB.txt) >result.tmp
result.tmpファイルは、最初の行の上にFileA行を持つFileBになります。
変更を見ると、result.tmpをfileB.txtに移動したいのと同じです。
あなたの質問にfileAのどの行をfileBに挿入するかを指定しなかったので、最初の行が欲しいとします。
答え3
上書きする前にsplitFile
withの内容を取得してください。cat
echo -e "$(sed -n 1,1p originalFile)\n$(cat splitFile)" > splitFile
読み取りは簡単ですが、大容量ファイルの場合は高価です。
答え4
sedを試してください
$ sed -i "1i$(sed -n 1p originalFile)" splitFile
1i
ファイルの行 1 の後にテキストを挿入します。$(sed -n 1p originalFile)
元のファイルの最初の行を取得します。