Edit yer alacaktır. Bu cevabı yazdığımda, sorunun "terabayt" bölümünü gözden kaçırdım. Bu nedenle, burada sunulan yöntem kullanmayın. Hala bu yazıyı bırakıyorum, çünkü bu harika aracın kullanımını, standart metin editörü olan ed
.
Her zamanki gibi, ed
standart metin editörüdür. sed -i
kullanılarak yapılan çözüm, "dosyayı yerinde düzenleyin" ifadesinde bulunmuyor. Bunun yerine, içeriğini geçici bir dosyaya gönderir ve sonra bu dosyayı orijinal olana yeniden adlandırır. Bu büyük dosyalar için gerçekten iyi değil!
Bunun yerine ed
kullanarak dosyayı gerçekten düzenler.Aşağıdaki doğrultuda bir şey:
#!/bin/bash
file="input.csv"
{
ed -s "$file" <<EOF
1
i
id1,id2,id3,id4
.
wq
EOF
} > /dev/null
Açıklama: 1
, ilk satıra gider i
ekleme moduna girer, o zaman id1,id2,id3,id4
sonra .
Normal moda geri dönmek için yerleştirin ve wq
yazıp çıkmak için.
Bu yöntemde, dosyayı gerçekten düzenlersiniz ve sed yönteminden iki kat daha hızlıdır. Ayrıca, ed
"büyük dosya güvenli" olarak bilinir!
Bitti.
Kesinlikle böyle büyük bir dosya ile bunu yapmazdım. sed, anında bir tmp dosyası oluşturuyor - eğer alanı bulmayı başaramazsa, orijinal dosyanızın içeriğini kaybettiyseniz şaşırmam. Sadece 'cmd dosyası> tmp && mv tmp dosyası' kullanın ve güvenli olduğunu biliyorsunuz. –
@Ed: Haklısınız, bu, söz konusu olan gibi çok büyük dosyalar için özellikle güvenli değildir. Cevabımı hala sed kullanarak daha güvenli bir alternatif sağlamak için düzenledim. –