awk
ile sekme ile ayrılmış alanlar dosyasındaki bazı sütunları nasıl silebilirim?awk veya linux komut satırından bir dosyadan sütun silme
c1 c2 c3 ..... c60
Örneğin, 3 ve 29 arasındaki sütunlar silin.
awk
ile sekme ile ayrılmış alanlar dosyasındaki bazı sütunları nasıl silebilirim?awk veya linux komut satırından bir dosyadan sütun silme
c1 c2 c3 ..... c60
Örneğin, 3 ve 29 arasındaki sütunlar silin.
tüm sütunlar üzerinde döngü ve olanları süzmek istemediğiniz edebilirsiniz:
awk '{for (i=1; i<=NF; i++) if (i<3 || i>29) printf $i " "; print""}' input.txt
NF
size kayıttaki alanların sayısını verir.
Koşulları karşılayan her sütun için, sütunu ve ardından " "
boşluğunu yazdırıyoruz.
DÜZENLEME: johnny gelen sözler sonrasında güncelleme:
awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt
bu 2 şekilde geliştirildi:
cut -f1,2,30- inputfile
varsayılan sekme geçerli:Bu cut
komut için budur. Bunu -d
anahtarıyla değiştirebilirsiniz.
Ubuntu'da çalışabilmek için en son '-' yi kaldırmak zorunda kaldım. Eğer onu bırakırsam, 'kes' tüm sütunları basardı. Bu sorunu da gören var mı? –
Sonuncuya bir, iki ve otuz sütun basması gerekir (sorudaki 60). Eğer bu Ubuntu'da bir hata değil! –
Aaaah, tamam. Bir hata yaptım. Benim hatam. –
awk '{for(z=3;z<=15;z++)$z="";$0=$0;$1=$1}1'
giriş
c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21
Çıkış
c1 c2 c16 c17 c18 c19 c20 c21
Bu, sütunları silmez. Onları boşaltır ve tekrar yazdırır ... OP'nin 'O * FS' ile belirtilen '\ t' yerine, istemedikleri tek bir yer almıştır. _apparent_ delesyonu rastlantısaldır ve 'FS' ve' OFS''nın '\ s +' varsayılanı olması gerekir. Oldukça işe yaramaz bir ayırıcı ve OP ''t' ile uyumsuz, onların dosyaları rastlantısal olarak boş alanlara sahip olmadıkça, onları pürüzlü satırlara sıkıştırır. Başka herhangi bir ayırıcı, ör. OP '' 't, hala istenmeyen sütunlara sahip çıktı verir, ama şimdi boş. Ve '$ 0 = $ 0' gereksiz ve savurgan olabilir. Bir kaydı yeniden oluşturmak için belgelenmiş yöntem: $ 1 = $ 1' –
Perl 'uç' çözüm:
perl -lane 'splice @F,3,27; print join " ",@F' file
üretir çıkışı:
c1 c2 c30 c31
stackoverflow Bu cevap size yardımcı olabilir: http://stackoverflow.com/questions/2626274/awk-print-all-other-columns-but-not-1-2-and-3 – iwg