Puncte:0

Citiți fișiere cu LOOP în scriptul Bash?

drapel ad

Sper că cineva îmi poate explica ce se întâmplă în această situație și cum să o rezolv.

Încerc un lucru simplu: pentru a citi fiecare rând dintr-un fișier text cu buclă.

Acesta este conținutul fișierului text la care lucrez:

aaaa aaaa a aa
bb bbbbb bbbbb b
cccccccc c c c

NOTĂ: Acesta este un fișier simplu, doar pentru a testa conceptul. Fișierul text principal pe care îl lucrez are aproximativ 140 MB, cu un aspect pozițional pentru fiecare câmp.

Acesta este conținutul meu de script bash:

FILE=./text.txt

awk '{ print }' $FIȘIER | în timp ce citiți RÂND; do
    echo $ROW
Terminat

Primesc fiecare rând din fișier, dar acesta este rezultatul:

aaaa aaaa a aa
bb bbbbb bbbbb b
cccccccc c c c

După cum puteți vedea, spațiile albe suplimentare sunt eliminate din ieșire.

Încerc să testez acest script folosind awk, dar am încercat deja cu pisică și stdout si a avut acelasi rezultat:

FILE=./text.txt

# pisică
pisica $FILE | în timp ce citiți RÂND; do
    echo $ROW
Terminat

##########

# stdout
în timp ce citiți RÂND; do
    echo $ROW
terminat < $FILE

Am incercat si eu sa folosesc pentru buclă:

pentru RÂND în $(awk '{ print }' $FILE); do
    echo $ROW
    ecou „---”
Terminat

Dar acesta a fost rezultatul, conținutul fiecărui rând a fost împărțit de spațiile albe:

aaaa
---
aaaa
---
A
---
aa
---
bb
---
bbbbb
---
bbbbb
---
b
---
cccccccc
---
c
---
c
---
c
---

După cum am menționat anterior, fișierul text principal are câmpuri poziționale, de aceea am nevoie de toate caracterele rând, chiar dacă sunt spații albe suplimentare.

Mă întrebam dacă cineva îmi poate explica de ce au fost eliminate spațiile albe suplimentare și cum să imprimați/lucrați conținutul întregului rând (cu orice spațiu alb suplimentar)?

drapel hr
`echo $ROW` ar trebui să fie `echo "$ROW"`- vezi [bash - Când este necesară ghilimelele duble?](https://unix.stackexchange.com/a/68748/65304). De asemenea, probabil că doriți `IFS= read -r ROW`, mai degrabă decât `read ROW`.
jpbrain avatar
drapel ca
Acesta este răspunsul ^^^^^^^^ (șofer de oțel). Argumentele sunt diferite cu ghilimele.
Leandro Mana avatar
drapel ad
Multumesc mult baieti pentru ajutor!!! A mers =D. Voi fi atent la citate de acum înainte. Multumesc din nou

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.