Linux “cat” komutuyla, sadece belirli satırları sayılara göre nasıl gösteririm?


59

Ben kullanırsanız cat -n text.txtotomatik hatları numara, nasıl o zaman sadece belirli numaralı satırları göstermek için komutu yoktur.


1
"Sadece belirli numaralandırılmış satırları göster" ile ne demek istiyorsunuz, beklenen bir çıktı verebilir misiniz?
tachomi

1
Muhtemelen bunu yapmanın milyonlarca yolu olacak. tail+ headayrıca bunu yapabilirsinizawk
Bratchley

Yanıtlar:


120

kullanım sed

kullanım

$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

Bir satır yazdırmak için (5)

$ sed -n 5p file
Line 5

Birden fazla satır yazdırmak için (5 ve 8)

$ sed -n -e 5p -e 8p file
Line 5
Line 8

Belirli bir aralığı yazdırmak için (5 - 8)

$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8

Diğer belirli satırlarla aralığı yazdırmak için (5 - 8 ve 10)

$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10

27

Bunu yapmanın bir yolu kullanmaktır sed:

cat -n text.txt | sed '11d'

buradaki 11, kaldırılmasını istediğiniz satırın numarasıdır.

Veya 11 hariç tümünü kaldırmak için:

cat -n text.txt | sed '11!d'

Seriler de mümkündür:

cat -n text.txt | sed '9,12!d'

Ve cat -nhatta gerekli değil:

sed '9,12!d' text.txt

9

Doğrudan awk kullanabilirsiniz.

awk 'NR==1' file.txt

'1' yerine istenilen satır numarası yazılmalıdır.


1
Bu, bir milyon kilometre boyunca buradaki en iyi cevap ve sahip olduğundan çok daha fazla sevgi hak ediyor.
Wren

8

Hedeflere bağlı olarak ben kafa veya grep seviyorum

cat /var/log/syslog -n | head -n 50 | tail -n 10

41'den 50'ye kadar olan satırları döndürür.

veya

cat /var/log/syslog -n | grep " 50" -b10 -a10

40 - 60 arası satırları gösterecektir. grep yöntemindeki sorun, satır numaralarını doldurmak için hesap kullanmanız gerektiğidir (boşluklara dikkat edin)

Her ikisi de günlük dosyalarını ayrıştırmak için oldukça kullanışlıdır.


Ne örnek ihtiyacı catolsa
roaima

1
iyi evet ... ama .... ama ... ..... Daha iyi yollar var. Soru olsa da kedi kullanmak istedi, ben de kullandım.
coteyr

catOP ne istiyorsa
yapamam

2

Diğerlerinin size gösterdiği gibi, kullanmaya gerek yoktur cat -n. Diğer programlar sizin için yapacak. Ancak, çıktısını gerçekten ayrıştırmanız cat -nve yalnızca belirli satırları göstermeniz gerekiyorsa (örneğin, 4-8, 12 ve 42), şunları yapabilirsiniz:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
 4  Line 4
 5  Line 5
 6  Line 6
 7  Line 7
 8  Line 8
12  Line 12
42  Line 42

Olarak awk, $1birinci alan, yani, 4 ve 8 (dahil) ya da ii) 12 veya iii) 42 arasında, bu komutu,, ilk alanları I olan bütün çizgiler).

cat -nOrijinal satırları dosyadan almak için eklenen alanı da kaldırmak isterseniz , şunları yapabilirsiniz:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42
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.