1
votes

Condition sur le Nième caractère de chaîne dans une colonne Mois dans bash

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?


0 commentaires

4 Réponses :


2
votes

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


0 commentaires

2
votes

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.


0 commentaires

0
votes

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]*/}


0 commentaires

0
votes

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
    


0 commentaires