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:
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