Newsgroup: it.comp.os.linux.iniziare
Titolo: Cancellare riga se...

 
 
Salve a tutti
 
Ho un file con delle stringhe composte da 20 caratteri minuscoli
e maiuscoli  che  possono essere tipo: zpianDhsfiseisJeYuab
Devo cancellare le stringhe dal file se alla posizione x e y hanno
determinati caratteri.
Il file e composto da record o come li chiama Awk campi.
 
Domanda: e possibile farlo con Awk?
 
 
Grazie a tutti
 
Ciao 
 
 

In date: Mon, 09 Sep 2019 13:37:10 on group: it.comp.os.linux.iniziare,

Un esempio al volo...
 
---------[CUT]---
#!/bin/bash
 
# $1 = primo carattere cercato
# $2 = secondo carattere cercato
 
# $3 = posizione primo carattere cercato
# $4 = posizione secondo carattere cercato
 
 
echo "12345678901234567890" > file
echo "zpianDhsfiseisJeYua1" >> file
echo "zpianAhsfiseisJeYua2" >> file
echo "zpianDhsfiseisBeYua3" >> file
echo "zpianAhsfiseisBeYua4" >> file
echo "zpianDhsfiseisJeYua5" >> file
echo "zpiaADhsfiseisJeYua6" >> file
echo "zpiaADhsfiseBsJeYua7" >> file
 
cat file
echo
echo '-----------------------------------'
echo
 
 
# stampa riga in cui P è in posizione X e S in posizione Y
cat file | awk -v P=$1 -v S=$2 -v X=$3 -v Y=$4 '{split ($0 , M , "") }
{ printf "%-3s   %-1s  %-1s   ", M[20], M[X], M[Y] }
{if ( P == M[X] && S == M[Y] ) printf "%s", $0 } ; {print ""}'
 
echo
echo '-----------------------------------'
echo
 
# stampa righe in cui P ed S non sono rispettivamente in X ed Y
cat file | awk -v P=$1 -v S=$2 -v X=$3 -v Y=$4 '{split ($0 , M , "") }
{ printf "%-3s   %-1s  %-1s   ", M[20], M[X], M[Y] }
{if ( P != M[X] || S != M[Y] ) printf "%s", $0 } ; {print ""}'
 
 
#  testare il file con:      ./t     A B 6 15
---------[CUT]---
 
 
A è il primo carattere
B è il secondo carattere
6 e 15 sono rispetticvamente le posizioni in cui A e B si devono trovare.
Il primo "{printf...}" è solo diagnostico....
 
 
 
 
-- 
--- GoldED 2.40
 * Origin: The Floating Point Unit (2:335/311.10)

 

Se poi le righe contengono DIVERSI campi da 20 caratteri e vuoi cancellare
tutte le righe che abbiano almeno un campo che contenga i 2 caratteri in quella
specifica posizione, si può usare sed (più comodo):
 
cat file2
12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890
zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1
zpianAhsfiseisJeYua2 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpianDhsfiseisBeYua3 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpianAhsfiseisBeYua4 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst x
zpianDhsfiseisJeYua5 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpiaADhsfiseisJeYua6 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpiaADhsfiseBsJeYua7 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst zpianAhsfiseisBeYua4 abcdefghijklmnopqrst abcdefghijklmnopqrst x
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
 
 
cat file2 | sed '/.....A........B...../d'
12345678901234567890 12345678901234567890 12345678901234567890 12345678901234567890
zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1 zpianDhsfiseisJeYua1
zpianAhsfiseisJeYua2 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpianDhsfiseisBeYua3 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpianDhsfiseisJeYua5 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpiaADhsfiseisJeYua6 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
zpiaADhsfiseBsJeYua7 abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst abcdefghijklmnopqrst
 
 
-- 
--- Mercurio 1.12
 * Origin: -HI- T'wood'b bet'r we w'r ol-'b-s! (2:335/318.16)

 
Ok ti ringrazio per la risposta esaustiva.