[Risolto]Assegnare stringa a variabile con awk

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
RTK901
Prode Principiante
Messaggi: 113
Iscrizione: sabato 17 settembre 2022, 12:23
Desktop: Lxqt
Distribuzione: Antix23
Sesso: Maschile

[Risolto]Assegnare stringa a variabile con awk

Messaggio da RTK901 »

Salve a tutti

Sto provando ad assegnare un stringa composta da due nomi "CANE GATTO" ad una variabile
con awk prendendo il primo campo ed assegnarlo alla variabile var1 e il secondo campo a var2.

Ho provato con:
var="CANE GATTO"
var1=$(echo $var | awk $1);
var2=$(echo $var | awk $2)
ma la cosa non funziona. Sarà una cosa semplice, forse avevo già fatto uno cosa di questo tipo
ma non ricordo come.

La variabile var cambia sempre il primo campo varia in numero di caratteri ed il secondo stessa cosa.

Devo prendere solo il primo campo e il secondo campo tramite awk.

Grazie a tutti

Ciao
Ultima modifica di RTK901 il mercoledì 30 ottobre 2024, 12:07, modificato 1 volta in totale.
korda
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2178
Iscrizione: giovedì 24 dicembre 2020, 15:58

Re: Assegnare stringa a variabile con awk

Messaggio da korda »

Quali valori trovi assegnati alle variabili var1 e var2 quando lanci la sequenza di comandi?
Io non sono Bagheera né Akela, io non frequento la Rupe.
Io sono Kaa: faccio ballare le scimmie alle Tane Fredde.
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 595
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu24@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Assegnare stringa a variabile con awk

Messaggio da Lucio C »

Suggerisco di usare la funzione split

Codice: Seleziona tutto

var="CANE GATTO"
n=split(var,a)
var1=a[1]
var2=a[2]
Ovviamente si puo' usare direttamente a[1] invece di var1 ecc. Leggere man awk sui dettagli di split. Nel modo di default splitta sui singoli blank come awk col FS di default, ma si puo' splittare su altri separatori.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14081
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 13 (Trixie) - KDE

Re: Assegnare stringa a variabile con awk

Messaggio da thece »

:ciao:

Codice: Seleziona tutto

#!/bin/bash

VAR="CANE GATTO"
VAR1=$(echo $VAR | awk 'BEGIN {FS=" "} {print $1}')
VAR2=$(echo $VAR | awk 'BEGIN {FS=" "} {print $2}')
echo $VAR1
echo $VAR2

exit 0
... ma personalmente userei split
I'm #1 so why not try: sudo rm -rf / ?
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4467
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 24.04.1 LTS
Sesso: Maschile
Contatti:

Re: Assegnare stringa a variabile con awk

Messaggio da UbuNuovo »

basta usare print:

Codice: Seleziona tutto

var="CANE GATTO"
var1=$(echo $var | awk '{print $1}')
var2=$(echo $var | awk '{print $2}')
echo $var1
echo $var2

Codice: Seleziona tutto

8-) var="CANE GATTO"
8-) var1=$(echo $var | awk '{print $1}')
8-) var2=$(echo $var | awk '{print $2}')
8-) echo $var1
CANE
8-) echo $var2
GATTO
8-) 
anche se mi sembra più semplice con read

Codice: Seleziona tutto

var="ORCA FOCA CANE GATTO"
read var1 var2 var3 var4<<< $var
echo $var1
echo $var2
echo $var3
echo $var4

Codice: Seleziona tutto

8-) var="ORCA FOCA CANE GATTO"
8-) read var1 var2 var3 var4 <<< $var
8-) echo $var1
ORCA
8-) echo $var2
FOCA
8-) echo $var3
CANE
8-) echo $var4
GATTO
8-)
Salva l'Ucraina! 🇺🇦
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 595
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu24@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: Assegnare stringa a variabile con awk

Messaggio da Lucio C »

Ma scusate ... state parlando di parsare una stringa fatta di campi separati da spazio dentro uno script awk (la stringa e' una variabile awk), o di parsare la stringa a mano ("da terminale") o in uno shell script (la stringa e' una variabile di shell o variabile di environment)?

Nel primo caso si usa la funzione split di awk, dentro awk, senza proliferazione di processi pipando echo, altri awk ecc. ecc.

Nel secondo caso esiste il comando "cut" (fare man cut).
A parte che non conosco la sintassi delle variabili bash, dato che uso tcsh, almeno in tcsh una variabile puo' addirittura essere un array nativamente o no, Confrontare (in tcsh):

cosi' a e' una variabile di shell scalare il cui valore e' una stringa con degli imbedded blanks

Codice: Seleziona tutto

set a = 'cane gatto'
echo $a                     -> cane gatto
echo $a[1]                 -> cane gatto
echo $a[2]                 -> a: Subscript out of range.
cosi a e' un array con due elementi

Codice: Seleziona tutto

set a = (cane gatto)
echo $a[1]                  -> cane
echo $a[2]                  -> gatto
Questo invece (a parte l'assignment della variabile che e' shell-dependent) funziona in qualsiasi shell, usando cut che e' un comando a se'

Codice: Seleziona tutto

set a = 'cane gatto'
echo $a | cut -d" " -f1
echo $a | cut -d" " -f2
cut prende il campo (field, -f) 1 o 2 usando come separatore (-d) uno spazio bianco (" "). cut puo' anche essere usato per parsare con altri separatori, o anche per parsare caratteri o sottostrimghe per range
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4467
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 24.04.1 LTS
Sesso: Maschile
Contatti:

Re: Assegnare stringa a variabile con awk

Messaggio da UbuNuovo »

Sì, si può fare in moltissimi modi.
Con gli array è un ottimo metodo, in bash però mi piacciono poco.
Im php mettevo sempre tutto negli array, ma esiste il foreach (chiave valore) e un sacco di funzioni già pronte per la loro "gestione".
Con bash anche se esistono gli array associativi, la gestione è più macchinosa, a partire dalla sintassi.
Salva l'Ucraina! 🇺🇦
RTK901
Prode Principiante
Messaggi: 113
Iscrizione: sabato 17 settembre 2022, 12:23
Desktop: Lxqt
Distribuzione: Antix23
Sesso: Maschile

Re: Assegnare stringa a variabile con awk

Messaggio da RTK901 »

vi ringrazio perr le info, siete stati davvero gentili!
Non conoscevo read penso che sia il comando giusto, ma anche
gli altri potrebbero andare altrettanto bene. Grazie a tutti!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 5 ospiti