2012-03-06 19 views
15

Bir dosyadaki her satırın başına belirli bir dize eklemek istiyorum. Ben someFile.txt aşağıda iki satır var ederken, boruDosyadaki her satırın başına bir dize nasıl eklenir

Hello|there|john 
Hello|there|joel 

ile Tarih dizesini 03/06/2012 eklemek istiyorsanız Yani, ben var-cekti

03/06/2012|Hello|there|john 
03/06/2012|Hello|there|joel 

Bunu başarmak için nasıl ?

Not Dosyada 1,3 milyon satır var.

cevap

24
$ awk '{print "03/06/2012|" $0;}' input.txt > output.txt 

Bazı ortalama 2010 donanımında 1.3M satırlı bir dosya için yaklaşık 0,8 saniye sürüyor.

+0

Teşekkür ederiz. ÇALIŞIYOR bir cazibe gibi. – DragonBorn

3
sed -i 's/^/03\/06\/2012|/' input.txt 
+3

sed, 's' komutunun alan ayırıcısı olarak kullanılmayan karakteri kullanmanıza izin verir. Bu şekilde, tarihteki '/' lardan kaçmakla uğraşmanıza gerek yoktur. Örneğin. sed -i 's # 03/06/2012 | #' input.txt ' –

+0

Evet, bu daha iyi bir çözüm. Herhangi bir karakteri kullanabiliriz. Teşekkür ederim! – SNathan

0

Perl çözümü: Sadece eğlence için, G/tmp 10 koşular benchmarked

perl -ne 'print "03/06/2012|$_"' input.txt > output.txt

: Bir 1.3M çizgi girdi dosyasını kullanarak test

   Rate  awk perl_5.6.1  sed perl_5.22 perl_5.20 
awk  2.08/s   --  -10%  -10%  -26%  -32% 
perl_5.6.1 2.32/s  11%   --  -0%  -17%  -24% 
sed  2.33/s  12%   0%   --  -17%  -24% 
perl_5.20 3.06/s  47%  32%  31%   9%   -- 

burada oluşturuldu:
perl -le 'while (1){exit if ++$n > 1300000; print $n}' > input.txt

İlgili konular