Com imprimir un interval de columnes mitjançant l'ordre `awk`

How Print Range Columns Using Awk Command



L'ordre 'awk' és una de les moltes ordres que es poden utilitzar per imprimir un rang de columnes a partir de dades tabulars a Linux. L'ordre `awk` es pot utilitzar directament des del terminal executant el fitxer de script` awk`. En aquest tutorial, us mostrarem com imprimir un interval de columnes a partir de dades tabulars.

Exemple 1: imprimiu un interval de columnes des d'una sortida d'ordres

L'ordre següent imprimirà les segones, terceres i quartes columnes de la sortida de l'ordre, ‘ls -l ‘. Aquí, els números de columna s’indiquen explícitament, però a l’exemple següent es mostra una ordre més eficient per imprimir el mateix rang de columnes.







$ls -la | awk '{print $ 2, $ 3, $ 4}'

La següent sortida la produeix l'ordre anterior.





Exemple 2: imprimiu l'interval de columnes d'un fitxer mitjançant un fitxer per bucle

Per seguir aquest exemple i els altres exemples d’aquest tutorial, creeu un fitxer de text anomenat marques.txt amb el contingut següent :





Identificador CSE203 CSE102 CSE202
1109 78 87 79
1167 67 81 70
1190 56 61 69
1156 89 55 78
199 54 66 58

L'ordre següent 'awk' imprimirà les tres primeres columnes de marks.txt. El per loop s'utilitza per imprimir els valors de les columnes i el bucle inclou tres passos. El NF variable indica el nombre total de camps o columnes del fitxer.

$gatmarques.txt
$awk '{for (i = 1; i<=NF-1;i++) printf $i' '; print ''}'marques.txt

La següent sortida es produirà executant l'ordre. La sortida mostra l'estudiant Identificacions i les marques de CSE203 i CSE102 .



Exemple 3: imprimiu l'interval de columnes definint variables inicials i finals

La següent ordre 'awk' imprimirà les tres primeres columnes de la sortida de l'ordre 'ls -l' inicialitzant el fitxer començant i final les variables. Aquí, el valor del fitxer començant variable és 1 i el valor de la variable final La variable és 3. Aquestes variables es repeteixen en un bucle for per imprimir els valors de les columnes.

$ls -la | awk 'BEGIN {primer = 1; darrer = 3}
{for (i = primer; i

La següent sortida apareixerà després d'executar l'ordre. La sortida mostra els tres primers valors de columna de la sortida, ‘ls -l’.

Exemple 4: imprimiu un rang de columnes d'un fitxer amb format

L'ordre següent 'awk' imprimirà les tres primeres columnes de marques.txt utilitzant printf i separador de camps de sortida ( OFS ). Aquí, el bucle for inclou tres passos i s’imprimiran tres columnes en seqüència des del fitxer. OFS s'utilitza aquí per afegir espai entre columnes. Quan el valor del comptador del bucle (i) és igual a final variable, es genera una nova línia ( n).

$gatmarques.txt
$awk -v començar=1 -v final=3 '{for (i = inici; i<=end;i++) printf('%s%s',
$ i, (i == final)? ' n': OFS)} '
marques.txt

La següent sortida es generarà després d'executar les ordres anteriors.

Exemple 5: imprimiu l'interval de columnes d'un fitxer mitjançant una sentència condicional

L'ordre següent 'awk' imprimirà la primera i l'última columna d'un fitxer mitjançant un bucle for i una sentència if. Aquí, el bucle for inclou quatre passos. El començant i final s'utilitzen variables a l'script per ometre la segona i la tercera columna del fitxer mitjançant la condició if. La variable OFS s'utilitza per afegir espai entre les columnes i la variable ORS s'utilitza per afegir una línia nova ( n) després d'imprimir l'última columna.

$gatmarques.txt
$awk -v començar=2 -v final=3 '{for (i = 1; i<=NF;i++)
if (i> = start && i<=end) continue;
else printf ('% s% s', $ i, (i! = NF)? OFS: ORS)} '
marques.txt

La següent sortida apareixerà després d'executar les ordres anteriors. La sortida mostra la primera i l'última columna de marks.txt.

Exemple 6: imprimiu l'interval de columnes d'un fitxer mitjançant la variable NF

L'ordre següent 'awk' imprimirà la primera i l'última columna del fitxer mitjançant una variable NF. No s’utilitzen bucles ni sentències condicionals per imprimir els valors de les columnes. NF indica el nombre de camps. Hi ha quatre columnes a marks.txt. $ (NF-3) defineix la primera columna i $ NF indica la darrera columna.

$gatmarques.txt
$awk '{print $ (NF-3)' '$ NF}'marques.txt

La següent sortida es produeix executant les ordres anteriors. La sortida mostra la primera i l'última columna de marks.txt.

Exemple 7: imprimiu l'interval de columnes d'un fitxer mitjançant substr () i index ()

La funció index () retorna una posició si el segon valor d'argument existeix al primer valor d'argument. La funció substr () pot adoptar tres arguments. El primer argument és un valor de cadena, el segon argument és la posició inicial i el tercer argument és la longitud. El tercer argument de substr () s'omet a l'ordre següent. Com que la columna comença a partir de $ 1 a l'ordre `awk`, la funció index () retornarà $ 3 i l'ordre imprimirà de $ 3 a $ 4.

$gatmarques.txt
$awk '{print substr ($ 0, index ($ 0, $ 3))}'marques.txt

La següent sortida es produirà executant les ordres anteriors.

Exemple 8: imprimiu seqüencialment un interval de columnes d'un fitxer mitjançant printf

L'ordre següent 'awk' imprimirà la primera, la segona i la tercera columna de marks.txt establint prou espai per a 10 caràcters.

$gatmarques.txt
$awk '// {printf'% 10s% 10s% 10s n ', $ 1, $ 3, $ 2}'marques.txt

La següent sortida es produirà executant les ordres anteriors.

Conclusió

Hi ha diverses maneres d'imprimir l'interval de columnes des de la sortida de l'ordre o d'un fitxer. Aquest tutorial mostra com l'ordre `awk` pot ajudar els usuaris de Linux a imprimir contingut a partir de dades tabulars.