¿Cómo funciona este script awk? -- mmand-line campo con unix camp apple Relacionados El problema

How does this AWK script work?


0
vote

problema

Español

Tengo 2 archivos de datos cada uno que contiene una columna. Quiero hacer otro archivo de datos fusionando ambas columnas. Tengo la línea de comandos en Shell, pero no sé cómo funciona.

Explique elaboradamente el comando a continuación:

  awk 'NR==FNR {a[i++]=$0};              {b[x++]=$0;};{k=x-i};      END     {for(j=0;j<i;) print a[j++],b[k++]}'    file1.txt file2.txt   

Ejemplo:

Entrada:

  file1.txt    11 23 19 31 67 file2.txt 13 19 25 67 93   

Utilicé el comando de arriba para escribir un script de shell y obtuve Siguiendo la salida:

  11 13 23 19 19 25 31 67 67 93   

¡Quiero saber cómo esta línea de comando está trabajando en este ejemplo para dar la salida?

Original en ingles

I have 2 data files each containing one column. I want to make another data file by merging both the columns. I have the command line in shell but I don't know how it works.

Please explain elaborately the below command:

awk 'NR==FNR {a[i++]=$0};              {b[x++]=$0;};{k=x-i};      END     {for(j=0;j<i;) print a[j++],b[k++]}' \   file1.txt file2.txt 

Example:

input:

file1.txt    11 23 19 31 67 file2.txt 13 19 25 67 93 

I used the command above to write a shell script and got following output:

11 13 23 19 19 25 31 67 67 93 

I want to know how this command line is working on this example to give the output?

     
       
       

Lista de respuestas

1
 
vote

Bueno, parte del aprendizaje a usar Unix es averiguar qué están haciendo los scripts existentes. En este caso, debe saber un poco sobre cómo ABCDEFGHIJKLMNABCDEFGHIJKLMN2 trabaja para comprender el código. Me concentraré en describir la parte awkfhghijklmn3 , esto debería comenzar a descubrir el resto.

Básicamente awk es un lenguaje de scripting impulsado por patrones, donde los comandos consisten en un patrón / condición de (búsqueda) y un bloque de código correspondiente. Durante la ejecución, cualquier archivo de entrada se lea línea por línea y si el patrón / condición es válido para una línea, se ejecuta el bloque de código. Hay patrones especiales BEGIN y abcdefhijklmnabcdefghijklmn6 que se utilizan para activar el código para ejecutar antes de la primera línea o después de La última línea se lee.

En su ejemplo, tiene tres líneas de patrón / código:

  NR==FNR {a[i++]=$0};   

NR y abcdefhijklmnabcdefghijklmn9 son dos variables especiales establecidas por syntax on0 . Puede buscar su significado con syntax on1 para ver que

  syntax on2  

Así que, básicamente, esta condición es verdadera, mientras que las líneas de la primera línea se leen (lo que significa que syntax on3 se ejecuta una vez por cada línea desde el primer archivo) y Falso para todos los archivos adicionales. ABCDEFGHIJKLMNABCDEFGHIJKLMN14 es la línea de entrada actual.

  syntax on5  

Este bloque de código no tiene ninguna condición / patrón para que se ejecute para cada lectura de línea (de todos los archivos, incluido el primero).

  syntax on6  

Esta parte se ejecuta después de que se le haya leído y procesado la última línea del último archivo.

Con estos aspectos básicos, debería poder averiguar el significado de los diferentes bloques de código y las variables usted mismo.

 

Well, part of learning to use Unix is to figure out what existing scripts are doing. In this case you need to know a bit about how awk works to understand the code. I will focus on describing the awk part, this should get you started in figuring out the rest.

Basically awk is a pattern-driven scripting language, where commands consist of both a (search) pattern/condition and a corresponding code block. During execution, any input files are read line by line and if the pattern/condition is true for a line, the code block is executed. There are special patterns BEGIN and END which are used to trigger code to get executed before the first line or after the last line is read.

In your example you have three pattern/code lines:

NR==FNR {a[i++]=$0}; 

NR and FNR are two special variables set by awk. You can look up their meaning with man awk to see that

NR     ordinal number of the current record FNR    ordinal number of the current record in the current file 

so basically this condition is true while lines from the first line are read (which means that a[i++]=$0 is executed once for each line from the first file) and false for all additional files. $0 is the current line of input.

        {b[x++]=$0;};{k=x-i}; 

This code block has no condition/pattern so it gets executed for every line read (from all files including the first one).

END     {for(j=0;j<i;) print a[j++],b[k++]}'  

This part runs after the last line of the last file has been read and processed.

With these basics you should be able to figure out the meaning of the different code blocks and variables yourself.

 
 
 
 

Relacionados problema

2  Efectos de cambiar la cáscara  ( Effects of changing shell ) 
Recientemente Apple cambió el Shell predeterminado a ABCDEFGHIJKLMNABCDEFGHIJKLMN1 de ABCDEFGHIJKLMNABCDEFGHIJKLMN2 . En el pasado realicé cambios signific...

0  Bash Preguntar Actuando raro cuando haga clic en la tecla de arriba y luego presionada la tecla  ( Bash prompt acting weird when i click up key and then down key ) 
Entonces, mi indicador de bash se ve así [parth:~]$ y si voy cd to Desktop, se ve así [parth:Desktop]$ . Solo quiero ver el directorio actual, junto a mi...

4  Línea de comando DIA no funciona  ( Dia command line not working ) 
Tengo un problema con el uso de DIA desde la línea de comandos en OSX 10.7.4. Descargué e instalé el OS X DMG de http://dia-installer.de/download/macosx. HTM...

3  ¿Hay alguna manera de deshabilitar una cuenta de mensajes a través de la línea de comandos?  ( Is there a way to disable a messages account via command line ) 
Me gustaría detener / comenzar a recibir SMS / iMessage a través de la línea de comandos, para evitar tener que entrar en las preferencias del sistema. ¿Hay...

0  MacOS Catalina Línea de comandos herramientas y errores de GCC durante la instalación  ( Macos catalina command line tools and gcc errors during installation ) 
Las herramientas de línea de comandos están dando una multitud de errores al intentar instalar MUJOCO. Sospecho con una alta confianza en que este es un probl...

1  Launchd no está pasando argumentos a mi script PHP  ( Launchd is not passing arguments to my php script ) 
Estoy teniendo un problema raro. Utilizo launchd para ejecutar un montón de scripts de shell que actualizan el contenido en mi sitio. Estaba funcionando bien ...

2  ¿Cómo hago reanudarse las sesiones terminales en el león con ITERM2 y TCSHRC?  ( How do i make terminal sessions resume on lion with iterm2 and tcshrc ) 
Mi comprensión es que con león, mis ventanas terminales deben restaurar su estado. Sin embargo, esto no sucede para mí. Me pregunto si esto es porque uso TCSH...

1  Utilidad de línea de comandos para navegar por la base de datos de Apple's Photos.App como un sistema de archivos  ( Command line utility for browsing apples photos app database like a filesystem ) 
¿Hay una utilidad de línea de comandos para permitir la navegación y la edición de fotos en la base de datos de Photos.App Apple, como si estuviera navegando ...

2  Saliendo / comenzando el terminal (El Capitan)  ( Exiting starting the terminal el capitan ) 
En la última versión de Mac OS X terminal, noté que si escribo exit y la prensa Enter , obtengo lo siguiente: Last login: Wed Jan 27 09:18:48 on ttys000...

1  ¿Por qué solo tengo PIP3 pero no tengo pip?  ( Why do i only have pip3 but no pip ) 
He instalado Python3 desde www.python.org (no a través de la cerveza). Descubrí que no tenía PIP, solo PIP3. Como aquí, dijo https://pip.pypa.io/en/stable/in...

2  Automático Para ejecutar script shell con un archivo de texto de entrada, cópielo en el directorio específico  ( Automator to execute shell script with an input text file copy it to specific d ) 
Estoy simplificando hacer un archivo .deb con automatista. Actualmente tengo un script de shell que hace algunas acciones simples - Pregunte al usuario de ...

1  ¿El comando de la exportación de LOXCTL no funciona?  ( Launchctl export command not working ) 
De acuerdo con la página del hombre de launchctl , hay un abcdefghijklmnexport : export Export all of the environment variables of launchd for use in a...

5  ¿Cuál es el equivalente CTRL + X + E para el terminal de MACOS?  ( What is the ctrlxe equivalent for macoss terminal ) 
en el terminal de Ubuntu (y otros sistemas Linux), Ctrl + x + e , que abre un editor para permitirle editar su Comando al ocio, con soporte multilíneo, y...

76  ¿Cómo inicio TextEditor desde la línea de comandos?  ( How do i start texteditor from the command line ) 
Trabajo mucho en la línea de comandos en un terminal y desea iniciar un editor de texto en un determinado archivo. Soy de Linux Land y normalmente usa KWRITE ...

2  ¿Por qué no es mi perfil y los archivos de Bashrc ocultos?  ( Why arent my profile and bashrc files hidden ) 
He estado siguiendo tutoriales para editar .profile , abcdefhijklmnabcdefghijklmn1 y abcdefhijklmnabcdefghijklmn2 y descubrí que mi computadora tiene ab...




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


Licensed under cc by-sa 3.0 with attribution required.