ファイルBの最初の行の上にファイルAの行を挿入する方法

ファイルBの最初の行の上にファイルAの行を挿入する方法

私はこの問題を経験しており、オンラインで検索しても結果がないので、ここで助けを求めたいと思います。

約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 を追加します。追加ファイルにストリーミングします。終了する前にsed8000万行がすべて処理されるため、速度も非常に遅くなります。originalFile

分割すると、xaa等の名前で約160個のファイルが生成されます。ソースファイルのヘッダーを段階的にこのファイルに追加しましょうxabxac

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

上書きする前にsplitFilewithの内容を取得してください。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)元のファイルの最初の行を取得します。

関連情報