Com o comando Linux “ cat ”, como faço para mostrar apenas algumas linhas por número
On Fevereiro 15, 2021 by admin Se eu usar cat -n text.txt
para numerar as linhas automaticamente, como faço para usar o comando para mostrar apenas algumas linhas numeradas.
Comentários
Resposta
Use sed
Uso
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Para imprimir uma linha (5)
$ sed -n 5p file Line 5
Para imprimir várias linhas (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Para imprimir um intervalo específico (5 – 8)
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Para imprimir o intervalo com outra linha específica (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Resposta
Uma maneira de fazer isso é usando sed
:
cat -n text.txt | sed "11d"
onde 11 é o número da linha que você deseja remover.
Ou para remova todos, exceto 11:
cat -n text.txt | sed "11!d"
Os intervalos também são possíveis:
cat -n text.txt | sed "9,12!d"
E cat -n
não é” nem mesmo necessário:
sed "9,12!d" text.txt
Resposta
Você pode usar awk diretamente.
awk "NR==1" file.txt
substituindo “1” pelo número da linha desejada.
Comentários
- Esta é por um milhão de milhas a melhor resposta aqui e merece muito mais amor do que realmente tem.
Resposta
Dependendo dos objetivos que eu gosto, head ou grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
retornará as linhas 41 a 50.
ou
cat /var/log/syslog -n | grep " 50" -b10 -a10
mostrará as linhas 40 a 60. O problema com o método grep é que você tem que usar uma conta para preencher os números das linhas (observe o espaço)
Ambos são bastante úteis para analisar arquivos de log.
Comentários
- Nenhum exemplo precisa
cat
embora - bem, sim .. .mas …. mas … ….. Existem maneiras melhores. A pergunta feita sobre o uso de cat, porém, então eu usei.
-
cat
pode ' t fazer o que o OP deseja
Resposta
Como outros mostraram a você, não há necessidade de usar cat -n
. Outros programas farão isso por você. Se, no entanto, você realmente precisar analisar a saída de cat -n
e mostrar apenas linhas específicas (por exemplo, 4-8, 12 e 42), poderá fazer:
$ 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
Em awk
, $1
é o primeiro campo, então este comando imprime todas as linhas cujos primeiros campos são i) entre 4 e 8 (inclusive) ou ii) 12 ou iii) 42.
Se você também deseja remover o campo adicionado por cat -n
para obter as linhas originais do arquivo, você pode fazer:
$ 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
Comentários
- Não foi possível ' usar
NR
em vez de$1
? - @SolomonUcko claro, mas já que estava demonstrando como fazer isso usando
cat -n
especificamente, pensei em usar a saída quecat -n
fornece .
Resposta
Você pode usar sed para mostrar apenas um número e l oop com um loop for:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
também pode fazer isso, assim comoawk