/ / Grep recherche sur une seule ligne? - bash, unix, grep

Grep recherche sur une seule ligne? - bash, unix, grep

J'utilise Bash pour trouver les dimensions d'une matrice. 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!

Réponses:

2 pour la réponse № 1

Utilisation:

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

Je prends la seule première ligne en utilisant head, remplacez chaque délimiteur de colonne par une nouvelle ligne en utilisant sed, puis canaliser à wc.


2 pour la réponse № 2

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


1 pour la réponse № 3

en utilisant awk

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

également si $1 est un argument transmis 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

1 pour la réponse № 4
sed "s:^I:n:g; q" | wc -l
^       ^
|_______|_______ change all ^I to n
|_______ quit after first line