Como canalizar a saída do gato para cortar

2

Eu quero cat /proc/uptime em cut -f1 em um script de Bash.

Eu tentei;

cat /proc/uptime | cut -f1
cat /proc/uptime > cut -f1
cut -f1 < cat /proc/uptime

Preciso usar o eco ou outra coisa para fazer isso acontecer?

    
por brenguy 18.06.2015 / 18:09

3 respostas

6

O delimitador de campo padrão para cut é uma guia. Como seu arquivo tem um espaço, você precisa especificar o delimitador:

-d ' '

E você realmente não precisa usar cat ou um pipe. Basta ler o arquivo diretamente.

cut -f 1 -d ' ' /proc/uptime
    
por 18.06.2015 / 18:17
2
cat /proc/uptime | cut -f1 -d' '

está correto

< /proc/uptime  cut -f1 -d' '

correta e mais eficiente, uma vez que lê /proc/uptime diretamente, sem criar um tubo (não que isso importe muito aqui).

Em geral, é aconselhável usar a segunda forma em fóruns, ou então você vai ter puristas vindo atrás de você gritando "utilização inútil de gato".

cut -f1 -d' ' < cat /proc/uptime

está errado . É o mesmo que

cut -f1 -d' ' /proc/uptime < cat

Se você está no bash, você também pode usar <() :

cut -f1 -d' ' < <(cat /proc/uptime)

Isso cria um canal nomeado anônimo para leitura e a saída de cat /proc/uptime será canalizada para ele. Mas novamente - uso inútil de gato.

Além disso, cut também pode tomar um argumento arquivo para todas as versões de redirecionamento também irá funcionar sem a < (não deve importar a eficiência-wise):

cut -f1 -d' '/proc/uptime

Ou com o canal < ():

cut -f1 -d' ' <(cat /proc/uptime)
    
por 20.06.2015 / 12:52
0

Por padrão, o delimitador para corte é TAB, você pode alterá-lo para ser espaço em branco com

cat /proc/uptime | cut -f1 -d " " 

Embora nesses casos prefiro usar o awk:

cat /proc/uptime | awk '{print$1}' 
    
por 18.06.2015 / 18:18