J'ai un échantillon
awk -F, 'BEGIN { OFS = FS } $2 ~/^[2-9]/' c.csv
Je n'ai besoin de grep que les nombres où le 4ème caractère de la 2ème colonne mais pas 0 ou 1
La sortie doit être
a,1234543,c
Je ne connais que cela
$ cat c.csv a,1234543,c b,1231456,d c,1230654,e
Est-il possible de mettre une condition sur le 4ème caractère?
4 Réponses :
Pourriez-vous essayer ce qui suit.
awk ' ##Starting awk program from here. BEGIN{ ##Starting BEGIN section from here. FS="," ##Setting field separator as comma here. } ##Closing BLOCK for this program BEGIN section. substr($2,4,1)!=0 && substr($2,4,1)!=1 ##Checking conditions if 4th character of current line is NOT 0 and 1 then print the current line. ' Input_file ##Mentioning Input_file name here.
OU selon la suggestion du site Ed:
awk 'BEGIN{FS=","} substr($2,4,1)!~[01]' Input_file
Explication: Ajout d'une explication détaillée pour le code ci-dessus ici.
awk 'BEGIN{FS=","} substr($2,4,1)!=0 && substr($2,4,1)!=1' Input_file
Cela pourrait fonctionner pour vous (GNU sed ou grep):
sed -E '/^([^,]*,){1}[^,]{3}[01]/d' file
ou:
grep -vE '^([^,]*,){1}[^,]{3}[01]' file
Remplacez le 1 pour la colonne m'th-1 et le
3
pour le caractère n'th-1 dans cette colonne.
Grep est la réponse. Mais voici une autre façon d'utiliser la substitution de tableau et de variable
test=( $(cat c.csv) ) echo ${test[@]//*,???[0-1]*/}
Il existe de nombreuses façons de faire cela avec awk. la forme la plus littérale serait:
Le 4ème caractère de la 2ème colonne n'est ni 0 ni 1
$ awk -F, '($2+0==$2) && ($2!~[.]) && ($2 !~ /^...[01]/)' $ awk -F, '($2 ~ /^[0-9][0-9][0-9][^01][0-9]*$/)'
Ceux-ci correspondront également à une ligne a,abcdefg,b
La 2ème colonne est un entier et le 4ème caractère n'est ni 0 ni 1
$ awk -F, '($2 !~ /^...[01]/)' file $ awk -F, '($2 ~ /^...[^01]/)' file