Usando AWK Command en Script Perl [CERRADO] -- scripts campo con perl campo con awk camp askubuntu Relacionados El problema

Using awk command in perl script [closed]


2
vote

problema

Español
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas.

¿Quieres mejorar esta pregunta? Actualizar la pregunta para que sea on-topic para pedirle a Ubuntu.

CERRADO hace 5 años .

Mejorar esta pregunta

¿Puede alguien sugerir cómo usar tuberías de comandos en un script Perl? Comandos específicamente que involucran llamando ABCDEFGHIJKLMNABCDEFGHIJKLMN0 ?

Estoy tratando de crear un script de Perl que leerá el uso del disco usando df -H y devuelva la segunda última fila de salida, que muestra el% de uso. Ingresar el comando directamente en el terminal devuelve la salida deseada.

  df -H | awk '{print $(NF-3)}'   

Este comando está devolviendo los resultados correctos. Pero cuando se utiliza el mismo comando en la utilidad de garrapatas inversas, el script Perl arroja muchos errores.

  $thirdlast=`df -H | awk '{print $(NF-3)}'`; print $thirdlast;   

¿Por qué el mismo comando no se ejecuta en el script? ¿Hay alguna otra forma de devolver los resultados requeridos?

Original en ingles

Can somebody suggest how to use piping of commands in a perl script? Specifically commands that involve calling awk?

I'm trying to create a perl script that will read disk usage using df -H and return the second-last row of output, which shows the %use. Entering the command directly in the terminal returns the desired output.

df -H | awk '{print $(NF-3)}' 

This command is returning the right results. But when using the same command in the reverse tick utility, the perl script throws a lot of errors.

$thirdlast=`df -H | awk '{print $(NF-3)}'`; print $thirdlast; 

Why does the same command not run in the script? Is there any other way to return the required results?

        

Lista de respuestas

6
 
vote
vote
La mejor respuesta
 

El problema principal es que el $ es importante para PERL. Cuando lo use en un comando de sistema, debe escaparlo:

  $thirdlast=`df -H | awk '{print $(NF-3)}'`; print $thirdlast;   

De lo contrario, PERL intentará expandir ABCDEFGHIJKLMNABCDEFGHIJKLMN5 como una variable Perl. La variable $( es el verdadero GID de Perl Process :

$ (

El verdadero GID de este proceso. Si está en una máquina que admite la membresía en varios grupos simultáneamente, proporciona una lista de grupos separados en el espacio en el que se encuentra.

La variable ABCDEFGHIJKLMNABCDEFGHIJKLMN7 es el GID efectivo del proceso:

SO, ABCDEFGHIJKLMNABCDEFGHIJKLMN8 Evalúa a ABCDEFGHIJKLMNABCDEFGHIJKLMN9 . Por ejemplo, en mi sistema, es decir:

  sudo apt-get install python-pip0  

El siguiente problema es que la llamada sudo apt-get install python-pip1 está equivocado. El ABCDEFGHIJKLMNABCDEFGHIJKLMN12 Uso es ABCDEFGHIJKLMNABCDEFGHIJKLMN13 , NO ABCDEFGHIJKLMNABCDEFGHIJKLMN14 . Entonces, lo que querías es:

  sudo apt-get install python-pip5  

O, solo imprimir porcentajes por encima de un cierto umbral, por ejemplo 90:

  sudo apt-get install python-pip6  

En cualquier caso, podría simplemente procesar la salida de ABCDEFGHIJKLMNABCDEFGHIJKLMN17 en PERL en sí:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN18   

o

  sudo apt-get install python-pip9  

y para establecer un umbral:

  sudo apt-get install shadowsocks0  

O, más directamente:

  sudo apt-get install shadowsocks1  

El ABCDEFGHIJKLMNABCDEFGHIJKLMN22 Guardará todas las coincidencias de la expresión regular ABCDEFGHIJKLMNABCDEFGHIJKLMN23 EN LA VARIABLE ABCDEFGHIJKLMNABCDEFGHIJKLMN24 En la matriz ABCDEFGHIJKLMNABCDEFGHIJKLMN25 . Que tendrá el mismo resultado que analiza el sudo apt-get install shadowsocks6 con sudo apt-get install shadowsocks7 .

 

The main problem is that the $ is important to perl. When you use it in a system command, you need to escape it:

$thirdlast=`df -H | awk '{print \$(NF-3)}'`; print $thirdlast; 

Otherwise, perl will try to expand $(NF-3) as a perl variable. The variable $( is the perl process's real GID:

$(

The real gid of this process. If you are on a machine that supports membership in multiple groups simultaneously, gives a space separated list of groups you are in.

The variable $) is the process's effective GID:

So, $(NF-3) evaluates to list of groups you are a member of NF-3). For example, on my system, that is:

$ perl -le 'print "$(NF-3)"' 1001 27 29 111 112 1001NF-3) 

The next problem is that your awk call is wrong. The % use is $(NF-1), not $(NF-3). So, what you wanted is:

$thirdlast=`df -H | awk '{print \$(NF-1)}'`; 

Or, to only print percentages above a certain threshold, for example 90:

$thirdlast=`df -H | awk '(\$(NF-1)>90){print \$(NF-1)}'`; 

In any case, you could just process the output of df in Perl itself:

$thirdlast=`df -H`; @matches=($thirdlast=~/(\S+%)/g); print "@matches\n"; 

Or

@matches=(`df -H`=~/(\S+%)/g); print "@matches\n"; 

And to set a threshold:

@matches=(`df -H`=~/(\S+%)/g); @above90=grep {$_>90} @matches; print "@above90\n"; 

Or, more directly:

@matches=grep {$_ >90} (`df -H`=~/(\S+%)/g); print "@matches\n"; 

The @array=($variable=~/foo/g) will save all matches of the regular expression foo in the variable $variable into the array @matches. That will have the same result as parsing the df with awk.

 
 
   
   

Relacionados problema

2  Suma Columna 2 de archivo .csv si la columna 1 es la misma  ( Sum column 2 of csv file if column 1 is the same ) 
Tengo un archivo CSV donde la columna 1 es el nombre de un gen y la columna 2 es un valor asociado con ese gen. Sin embargo, algunos genes tienen múltiples va...

2  ¿Cómo puedo usar para el bucle en una concha / terminal con AWK?  ( How can i use for loop in a shell terminal with awk ) 
El comando ABCDEFGHIJKLMNABCDEFGHIJKLMN9 Salidas: lshw0 ahora en lugar de especificar el nombre del paquete como lshw1 , quiero iterar más y obte...

0  ¿Cómo comparar las variables flotantes en AWK?  ( How to compare float variables in awk ) 
awk -F, 'NR==FNR{c[$29]=$29;next} NF{print $29 ((c[$29]==$29)?" ":",mismatch")}' $file1 $file2 El valor del campo 29, es decir, $ 29 en File1 fue 832.9 y...

0  Limpiando la salida de xev  ( Cleaning up the output of xev ) 
OS: Sesión OpenBox de Lubuntu 14.04 Digamos que ejecute ABCDEFGHIJKLMNABCDEFGHIJKLMN3 y presione la tecla Super , obtengo una gran cantidad de salida (& ...

1  Imprima columnas seleccionadas de un archivo si la fila se menciona en otro archivo  ( Print selected columns from a file if the row is mentioned in another file ) 
Mi primer archivo contiene datos como: Gene symbol Gene name Chromosome Start End Strand Otter gene ID Otter transcript ID Ensembl gene ID Ensembl ...

4  ¿Cómo usar la doble sustitución en AWK?  ( How to use double substitution in awk ) 
para imprimir los campos en la 29ª columna en dos archivos que usé paste <(awk -F, '{print $29}' PreRefFile.csv) <(awk -F, '{print $29}' Txlog.csv) Est...

2  SED / AWK Hacer líneas que comienzan con caracteres inferiores se fusionan a la línea anterior  ( Sed awk make lines starting with lower characters be merged to previous line ) 
aquí es lo que tengo este es a muestra texto Cómo a hacer eso ? Necesito que la salida sea: Este es un texto de muestra. Cómo hacerlo ? Además, ...

1  SED / AWK - Retire todas las etiquetas, excepto solo dos etiquetas y textos lisos  ( Sed awk remove all tags except only two tags and plain texts ) 
Aquí hay una muestra para mi archivo de texto: <w:r><w:t> <w:r w:rsidR="00D171FD"> <w:t></w:t> </w:r><w:r> <w:t xml:space="preserve"> This is a sample text...

2  Error AWK Command Syntax  ( Awk command syntax error ) 
$ awk '$2 - /^Tom$/ {print}' names.txt Estoy tratando de buscar un archivo que tenga el 2do campo que coincida con TOM. pero estoy recibiendo este erro...

0  extracción de la línea del archivo  ( Extract line from file ) 
Un archivo que necesito para extraer información de aspecto 2 41620 . T G 100 PASS AC=3;AF=0.000599042;AN=5008;NS=2504;DP=...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos