2010-12-15 22 views
7

.csv dosyamın sonunda bir para sonu var. Aşağıdaki komutu kullanarak dosyanın sonunda bulunan boş satırı kaldırmaya çalıştım.Son boş satırın kaldırılması

sed -i '/^$/d' combined.csv 

Fakat işe yaramıyor ve boş bir çizgi hala var. Son satırı aşağıdaki komutu kullanarak kaldırabilirim.

sed -i '$d' combined.csv 

Ancak son satırın kaldırılmadan önce gerçekten boş olup olmadığını kontrol etmek mümkün mü?

Güncelleme: Ben her satırı bir rakamla başlayamaz olmadığını kontrol için aşağıdaki komutu kullanıyorum

.

sed -i '1s/^[^0-9]*//' combined.csv 

Bu, yalnızca ilk satır için değil, satırların geri kalanını denetler. Dosyadaki bütün satırları nasıl kontrol edebilirim? Bu benim problemimi çözebilir.

cevap

17

${/^$/d;}'u deneyin, bu yalnızca dosyanın son satırıysa boş bir çizgi ile eşleşecektir.

Güncelleme: ikinci sorunun, sadece, s öncesine 1 kaldırmak yani .: Bu yaştan önce bir yerde ve pasajı kurtardı Bulunan sed -i 's/^[^0-9]*//' combined.csv

+0

sayesinde bu işleri! İlk sed komutunu hazırlar mısın? – dangonfast

5

. sorma nasıl çalıştığını:

perl -i -pe "chomp if eof" combined.csv 
+2

EOF'de boş bir satır yoksa (\ n \ n), bu da Unix'te kaldırılmaması gereken son EOF'yi kaldıracaktır. –

+0

@AleksandrLevchuk: İyi bir nokta, ama bu kolayca düzeltilenekadar:; herhangi POSIX ile, sadece iyi çalışması gerekir '' perl -pe 'chomp &&/^ $/eof eğer' – mklement0

0

$ deneyin; o dosyanın son satırı ise bu sadece boş bir satırla aynı olacak {/^$/d}.

Ben sed ile çalıştı (GNU sed) 4.2.2 ve dosyanın son satırı ise tüm boş satırlar boş satır değil sadece silinmiş var.

Aşağıdaki Komutu buldum, iş benim için işe yaradı.

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' 

Bu komut kullanışlı SED-Oneliners bir Koleksiyonu'ndan geçerli: http://sed.sourceforge.net/sed1line.txt

+0

'$ {/^$/d} combined.csv' uyumlu "sed".'Sedl' $ {/^$/d;} '<<< $' a \ n \ nb \ n'' deneyin ve yalnızca son satırın kaldırıldığını göreceksiniz. – mklement0

+0

Alternatifiniz farklı bir şey yapar: _all_ ekstra sondaki yeni satırları düzeltir, sadece sonuncu değil, aynı zamanda bu dosyada gereksiz olan ve büyük dosyalarda sorun olan _at once_ dosyasını da okur. – mklement0

0

Eğer grep . veya sed '/^$/d'

Bu dosyada herhangi boş satır kaldırır kullanabilirsiniz boş satırlar kaldırın. Umarım dosyada ortada hiç boş satır yoktur ama bu sizin durumunuzda çalışacaktır.

cat combined.csv | grep .

veya

cat combined.csv | sed '/^$/d'

İlgili konular