Làm thế nào để chuyển đầu ra awk (với đầu vào định kỳ, liên tục) vào tập tin đầu ra?


10

Tôi đang cố gắng viết một lệnh chuyển đầu ra liên tục của lệnh miễn phí (chạy mỗi giây) sang lệnh awk để phân tích một giá trị cụ thể (bộ nhớ trống có sẵn) và xuất nó thành tệp có dấu thời gian. Dưới đây là những nỗ lực hiện tại của tôi tại lệnh:

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut

Và thay vào đó, sau một chút của Google

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'

Mỗi lần chạy tạo ra các tập tin trống. Bất kỳ đề xuất hoặc phương pháp có thể khác nhau?

Câu trả lời:


13

Bạn phải xóa bộ đệm để xem nội dung nào đó trong memOutkhi thực hiện:

free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

Đây là một phiên bản thay thế:

while sleep 1; do sed -n "s/MemFree: */`date`, /p" /proc/meminfo; done >> memOut

Điều này đã cho tôi các tập tin đầu ra tôi muốn. Cảm ơn bạn!
Đánh dấu

3

Đối với các phiên bản cũ của awkbạn có thể phải sử dụng system("").

Trên thực tế, fflush(stdout)chỉ dành cho các phiên bản gần đây awkgawk, vì nó chỉ có trong tiêu chuẩn POSIX kể từ tháng 12 năm 2012.

free -mto -s 1 | awk '/Mem/ { 
    print strftime("%r") "," $4;
    system(""); # Flush output
}' >> memOut

Lưu ý rằng bằng cách sử dụng system("")tuôn ra mọi mô tả tệp, mô tả đầy đủ của nó nằm trong gawkhướng dẫn, phần "9.1.4 Hàm nhập / xuất".


2

Chỉ để đảm bảo rằng bạn đang nhận được những gì bạn thực sự muốn và không phải những gì bạn yêu cầu cụ thể.

Nếu bạn muốn biết bộ nhớ khả dụng trên hệ thống cho các chương trình thì điều này có thể phù hợp hơn:

free -m -s 1 | awk '/buffers\/cache/ { print strftime("%r") "," $4; fflush(stdout) }' >> memOut

Cột được sử dụng của dòng Mem bao gồm bộ đệm và bộ đệm và trong hầu hết các trường hợp khi bạn muốn theo dõi việc sử dụng bộ nhớ cho máy tính / tác vụ nhất định, những thứ đó ít nhất nên được lưu ý.


2

Trên các phiên bản nhất định của awk(ví dụ: mawk 1.3.3), bạn cần thêm -W interactivecờ dòng lệnh để cho phép hoạt động không có bộ đệm với các đường ống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.