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 № 1Utilisation:
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:
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 champsNR==1
première ligne seulementprint 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