/ / Hľadáte Grep iba na ONE LINE? - bash, unix, grep

Hľadať iba v ONE LINE? - bash, unix, grep

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ď č. 1

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

tu zadajte popis obrázku


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ý riadok
  • print 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