Grep recherche sur une seule ligne?

J’utilise Bash pour trouver les dimensions d’une masortingce. Voici mon code pour obtenir le nombre d’éléments dans une ligne, mais il imprime pour tout le fichier. J’ai juste besoin du nombre d’éléments dans ONE ROW.

grep -oP "\^I" $1 | wc -l 

Voici à quoi fait référence le dollar:

 1^I2^I3^I4$ 5^I6^I7^I8$ 

Pour une raison quelconque, il imprime 9 au lieu de 3.

Merci d’avance!

Utilisation:

 cat $1 | head -n 1 | sed 's/\^I/\n/g' | wc -l 

Je prends la première ligne uniquement en utilisant head , remplacez chaque délimiteur de colonne par une nouvelle ligne en utilisant sed , puis dirigez-le vers wc .

Vous pouvez utiliser sed avant d’appeler grep pour isoler une ligne spécifique de votre fichier:

 sed -n '1p' file | grep -oP "^I" | wc -l ^ ^ # will print the 1st line, 2p will print the second line etc 

sur votre entrée cela donne:

entrer la description de l'image ici

en utilisant awk

 $ awk -F'\\^I' 'NR==1{print NF-1}' $1 3 
  • -F'\\^I' ^I comme séparateur de champs
  • NR==1 première ligne seulement
  • print NF-1 puisque la question concerne le nombre de ^I , doit imprimer le nombre de champs moins un

aussi, si $1 est un argument passé au script shell, utilisez "$1" comme bonne pratique

et une supposition, c’est des données réelles avec lesquelles OP travaille

 $ cat ip.txt 1 2 3 4 5 6 7 8 $ cat -A ip.txt 1^I2^I3^I4$ 5^I6^I7^I8$ $ # exit to avoid unnecessary processing of other lines $ awk -F'\t' 'NR==1{print NF-1; exit}' ip.txt 3 
 sed 's:\^I:\n:g; q' | wc -l ^ ^ |_______|_______ change all ^I to \n |_______ quit after first line