Puncte:0

Număr de cuvinte pentru mai multe fișiere .txt în Linux

drapel mx

Trebuie să găsesc cuvintele în mai multe fișiere .txt folosind un cli linux. Momentan folosesc următoarea comandă:

pisică *.txt|wc -w

Am făcut un director de testare pentru a exersa comanda și pare să funcționeze pentru fiecare fișier .txt individual, dar nu reușește să o facă corect pentru toate fișierele .txt. Am un director cu 5 fișiere în care 4 dintre ele conțin fiecare 5 cuvinte și 1 este gol. Pentru individ cat textfile.txt|wc -w dă răspunsul corect. Dar pentru numărare dă 17 când ar trebui să fie (4 ori 5 + 0 ori 0 =) 20 Poate cineva să-mi spună de ce numărul dat este 17, în timp ce numărul real este 20?

pLumo avatar
drapel in
nu se poate reproduce, va trebui să adăugați fișierele de intrare.
pLumo avatar
drapel in
Aceste link-uri nu au nicio legătură cu întrebarea.
Puncte:3
drapel tr

Poți să alergi

wc -w *.txt

Acest lucru vă va oferi numărul de cuvinte pentru fiecare fișier și o sumă totală în ultimul rând.

După cum s-a dovedit, problema OP a fost o linie nouă lipsă într-unul dintre fișiere. Aceasta a cauzat pisica *txt pentru a combina mai multe cuvinte într-unul și, prin urmare, rezultă o numărare greșită. Comanda de mai sus este mai robustă în această situație, deoarece procesează fiecare fișier individual.

drapel mx
Am aflat de ce, nu exista un separator, așa că ultimul caracter din fișierul anterior a fost atașat la primul caracter al următorului fișier.
drapel mx
Mulțumesc @wayne_yux, m-am luptat cu el toată dimineața, cu un termen limită. Un lucru atât de stupid, soluția ta funcționează, EROU:)
Maarten Meijer avatar
drapel fr
Dacă puneți o linie nouă sau un spațiu la sfârșitul tuturor fișierelor (acest lucru se întâmplă automat cu `echo`, de exemplu), puteți utiliza doar comanda din întrebare
Wayne_Yux avatar
drapel tr
@pLumo care face mai întâi un `pisica` vă va oferi doar numărul total de cuvinte. Dacă rulați `wc -w` pe toate fișierele, veți obține un număr pentru fiecare fișier. Asta face depanarea mult mai ușoară. După cum se pare, problema OP a fost că nu exista o nouă linie la sfârșitul unui fișier. Asta ar determina `cat` să combine unele cuvinte. Dacă gestionați fișierele individual, acest lucru nu se întâmplă
pLumo avatar
drapel in
adevărat adevărat :-) are sens.
Puncte:1
drapel hr

Cea mai probabilă explicație este că liniile finale ale fișierelor dvs. nu sunt corect terminate cu noua linie, astfel încât atunci când pisică ele, primul cuvânt al fișierului următor este atașat ultimului cuvânt al fișierului anterior:

Ex. dat

steeldriver@pc:~$ printf 'foo\nbar\nbaz\nbam\nboo' | tee {1..4}.txt
foo
bar
baz
bam
boosteeldriver@pc:~$ printf '' > 5.txt

atunci

steeldriver@pc:~$ wc -w {1..5}.txt
 5 1.txt
 5 2.txt
 5 3.txt
 5 4.txt
 0 5.txt
20 in total

dar

steeldriver@pc:~$ cat {1..5}.txt | wc -w
17

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.