Používam Bash na nájdenie rozmerov matice. Tu je môj kód na získanie počtu prvkov v jednom riadku, vytlačí sa však pre celý súbor. Potrebujem len počet prvkov v JEDNOM ROW.
grep -oP "^I" $1 | wc -l
Tu je to, čo znamená $ 1:
1^I2^I3^I4$
5^I6^I7^I8$
Z nejakého dôvodu tlačí 9 namiesto 3.
Vopred ďakujem!
odpovede:
2 pre odpoveď č. 1použitie:
cat $1 | head -n 1 | sed "s/^I/n/g" | wc -l
Beriem jediný prvý riadok pomocou head
, nahraďte každý oddeľovač stĺpcov novým riadkom sed
, potom to dajte do potrubia wc
.
2 pre odpoveď č. 2
Môžete použiť sed pred volaním grepu na izoláciu jedného konkrétneho riadku súboru:
sed -n "1p" file | grep -oP "^I" | wc -l
^
^
# will print the 1st line, 2p will print the second line etc
na váš vstup dáva:
1 pre odpoveď č. 3
použitím awk
$ awk -F"\^I" "NR==1{print NF-1}" $1
3
-F"\^I"
použitie^I
ako oddeľovač políNR==1
iba prvý riadokprint NF-1
pretože ide o počítanie počtu^I
, je potrebné vytlačiť počet polí mínus jedno
tiež, ak $1
je argument odovzdaný do shellového skriptu, použite "$1"
ako osvedčený postup
a hádajte, toto sú skutočné údaje, s ktorými OP pracuje
$ 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 pre odpoveď č. 4
sed "s:^I:n:g; q" | wc -l
^ ^
|_______|_______ change all ^I to n
|_______ quit after first line