Sadece kedi ile tek satırları göster


26

SELAM,

Muhtemelen bu çok kolay bir şey, ama şimdi nokta anlamıyorum. Linux'ta, kabuk, bir metin dosyası verildiğinde, kedi dosya adı gibi bir şeyi nasıl yapabilirim, böylece yalnızca ilk satırı, üçüncü satırı, 5, 7, 9 ve benzerlerini görebilirim?

kedi ile değilse, başka bir komutla

Teşekkürler

bash 

Yanıtlar:


40

Kullanarak awk:awk 'NR % 2 == 0' filename

Düzenleme: {print}ghostdog74'ın cevabında gösterildiği ve Roberto Bonvallet tarafından yorumlandığı şekilde kaldırıldı.


1
{print}Varsayılan işlem, awk 'NR % 2 == 0' < myfileyeter.

3
@ roberto, giriş yönlendirmesine gerek yok.
user31894

1
Tıpkı bir not olarak, bu, ilk satırın 0 olduğunu düşünüyorsanız, satırları (ilk satırın 1 olduğu yer) ve tek satırları gösterir. Değiştir 2 == 0ile 2 == 1ters için.
cde

13

Veya böyle bir şey

sed -n 'p;n' filename

Açıklama için man sayfasına bakınız sed.


Bu sedbenim aklımdan çıkan taşınabilir versiyon.
Chris Johnsen

1
sed -n '1d;p;n'Örneğin
çiftler

7

Sed kullanın:

sed -n 1~2p filename

1
Bu bir GNU uzantısıdır. GNU’nun sedvarsayılan olmadığı sistemlerde çalışmayabilir .
Chris Johnsen

Doğru ama çoğu Linux tadı ile çalışmalı

Hmm .. Sadece "sed --posix -n 1 ~ 2p dosyaadı" nı denedim ve bu da işe yarıyor. --Posix'in gnu uzantılarını desteklemesi gerekiyordu.

GNU sedkılavuzu gnu.org/software/sed/manual/html_node/Addresses.html#Addresses “ilk ~ adım Bu GNU uzantısı…” diyor. Bahsetmiyor --posix. gsed --posix -n 1~2pDenemeye başladığımda (GNU sed 4.2.1) gsed: -e expression #1, char 2: unknown command: ‘~’.
Chris Johnsen

Tamam .. mantıklı. Başımda neyin yanlış olduğunu bilmiyorum. Cygwin kullanıyorum, bununla bir ilgisi olabilir.


2

Awk ile yapabileceğiniz 2 yol

$ awk '{getline;print}' file # the equivalent of the selected sed answer
$ awk 'NR%2==0' file

VEYA sadece kabuk ile

i=1; while read -r line; do [ $((i++ % 2)) -eq 0 ] && echo $line; done <"file"


0

Bunu test etmedim (Mac OS X'de çalışmıyor gibi), ancak GNU sed first~stepbir adres seçimi olarak destekliyor , örneğin:

sed -n 1~2p file

ilk satırdan başlayıp diğer satırları bundan sonra basardı.


Doğru, bu bir GNU uzantısıdır. Mac OS X sed, taban kurulumunda bir BSD kullanıyor .
Chris Johnsen


-2

Bu komutları sonuç gerektirmek için kullanabilirsiniz.

awk 'NR% 2 == 1'

sed -ne '1 ~ 2p'


2
-1. Bu, yaklaşık 10 yıl önceki cevapları çoğaltır, küçük farklılıklar hiç açıklanmaz. Ve neden ls -lburada?
Kamil Maciorowski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.