Điểm:0

Đọc tệp bằng LOOP trong Bash Script?

lá cờ ad

Tôi hy vọng ai đó có thể giải thích cho tôi điều gì đang xảy ra trong tình huống này và cách giải quyết.

Tôi đang cố gắng một điều đơn giản: để đọc từng hàng từ một tệp văn bản có vòng lặp.

Đây là nội dung tệp văn bản mà tôi đang làm việc trên:

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

LƯU Ý: Đây là một tệp đơn giản, chỉ để kiểm tra khái niệm. Tệp văn bản chính mà tôi đang làm việc có dung lượng khoảng 140 MB, với bố cục theo vị trí cho từng trường.

Đây là nội dung tập lệnh bash của tôi:

TỆP=./text.txt

awk '{ in }' $FILE | trong khi đọc ROW; làm
    tiếng vang $ROW
xong

Tôi đang lấy từng hàng từ tệp, nhưng đây là kết quả:

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

Như bạn có thể thấy, các khoảng trắng thừa đang bị xóa khỏi đầu ra.

Tôi đang cố kiểm tra tập lệnh này bằng cách sử dụng awk, nhưng tôi đã thử với con mèotiêu chuẩn và có kết quả tương tự:

TỆP=./text.txt

# con mèo
con mèo $FILE | trong khi đọc ROW; làm
    tiếng vang $ROW
xong

##########

# tiêu chuẩn
trong khi đọc ROW; làm
    tiếng vang $ROW
xong < $FILE

Tôi cũng đã thử sử dụng cho vòng lặp:

cho ROW trong $(awk '{ print }' $FILE); làm
    tiếng vang $ROW
    tiếng vang "---"
xong

Nhưng đây là kết quả, mỗi nội dung hàng được phân chia bởi khoảng trắng:

aaaa
---
aaaa
---
một
---
aa
---
bb
---
bbbbb
---
bbbbb
---
b
---
cccccccc
---
c
---
c
---
c
---

Như tôi đã đề cập trước đây, tệp văn bản chính có các trường vị trí, đó là lý do tại sao tôi cần tất cả các ký tự hàng, ngay cả khi chúng là khoảng trắng thừa.

Tôi tự hỏi liệu ai đó có thể giải thích cho tôi tại sao các khoảng trắng thừa lại bị xóa và cách in/làm việc với toàn bộ nội dung hàng (với bất kỳ khoảng trắng thừa nào) không?

lá cờ hr
`echo $ROW` phải là `echo "$ROW"`- xem [bash - Khi nào cần trích dẫn kép?](https://unix.stackexchange.com/a/68748/65304). Ngoài ra, bạn có thể muốn `IFS= read -r ROW` thay vì chỉ `read ROW`.
jpbrain avatar
lá cờ ca
Đó là câu trả lời ^^^^^^^^ (steeldriver). Đối số là khác nhau với dấu ngoặc kép.
Leandro Mana avatar
lá cờ ad
Cảm ơn các bác rất nhiều vì sự giúp đỡ!!! Nó hoạt động = D. Tôi sẽ chú ý đến các trích dẫn từ bây giờ. Cảm ơn một lần nữa

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.