Kuinka Linux “ cat ” -komennolla näytetään vain tietyt rivit numerolla
On helmikuu 15, 2021 by admin Jos käytän rivien automaattista numerointia cat -n text.txt
-toiminnolla, miten komennolla näytetään vain tietyt numeroidut rivit.
Kommentit
Vastaa
Käytä sed
Käyttö
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Yhden rivin tulostaminen (5)
$ sed -n 5p file Line 5
Useiden rivien tulostaminen (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Tietyn alueen (5 – 8) tulostaminen
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Alueen tulostaminen muulla tietyllä rivillä (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
vastaus
Yksi tapa tehdä se on käyttää sed
:
cat -n text.txt | sed "11d"
missä 11 on poistettavan rivin numero.
Tai poista kaikki paitsi 11:
cat -n text.txt | sed "11!d"
Alueet ovat myös mahdollisia:
cat -n text.txt | sed "9,12!d"
Ja cat -n
ei edes tarvita:
sed "9,12!d" text.txt
Vastaa
Sinä voi käyttää awk suoraan ylöspäin.
awk "NR==1" file.txt
korvaamalla ”1” halutulla rivinumerolla.
Kommentit
- Tämä on miljoona mailia paras vastaus täällä ja ansaitsee paljon enemmän rakkautta kuin sillä on.
Vastaa
Riippuen tavoitteista, joista pidän päätä tai grepiä
cat /var/log/syslog -n | head -n 50 | tail -n 10
palauttaa rivit 41-50.
tai
cat /var/log/syslog -n | grep " 50" -b10 -a10
näyttää rivit 40–60. Grep-menetelmän ongelma on, että täytyy käyttää tiliä rivinumeroiden täyttämiseen (huomaa välilyönti).
Molemmat ovat melko käteviä jäsentämään lokitiedostoja.
Kommentit
- Kumpikaan esimerkki ei kuitenkaan vaadi
cat
- no joo .. … mutta … mutta … … on parempia tapoja. Kysymys kissan käytöstä onkin, joten käytin sitä.
-
cat
ei voi ' tehdä sitä, mitä OP haluaa
vastaus
Kuten muut ovat osoittaneet, . Muut ohjelmat tekevät sen puolestasi. Jos kuitenkin sinun on todella jäsennettävä cat -n
-lähtö ja näytettävä vain tietyt rivit (esimerkiksi 4-8, 12 ja 42), voit tehdä seuraavaa:
$ 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
Kohdassa awk
$1
on ensimmäinen kenttä, joten tämä komento tulostaa kaikki rivit, joiden ensimmäiset kentät ovat i) välillä 4 ja 8 (mukaan lukien) tai ii) 12 tai iii) 42.
Jos haluat myös poistaa kentän, jonka on lisännyt cat -n
saadaksesi alkuperäiset rivit tiedostosta, voit tehdä seuraavaa:
$ 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
Kommentit
- Ei voitu ' t käyttää
NR
$1
? - @SolomonUcko varma, mutta koska osoitin, kuinka tämä tehdään käyttämällä
cat -n
-sovellusta, ajattelin käyttääcat -n
-tuotetta .
Vastaa
Voit käyttää sediä näyttämään vain yhden numeron ja l oho tämä for for -silmukalla:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
voi myös tehdä tämän, samoin kuinawk