Làm thế nào để tôi chuyển đầu ra thành ngày -d giá trị ED?


12

Tôi có một ngày như "2014-01-30 05:04:27 GMT" và nếu tôi chạy ngày -d "2014-01-30 05:04:27 GMT", đầu ra nằm trong múi giờ của máy chủ của tôi ("Thu 30 tháng 1 16:04:27 EST 2014 ").

Với việc sử dụng grep và cắt, tôi đã trích xuất ngày trong GMT từ một tệp. Tuy nhiên, tôi đang vật lộn để chuyển đổi nó thành giờ địa phương của tôi.

Ví dụ:

[nhật ký người dùng @ máy chủ] # grep "cái gì đó" logfile.txt | grep "Thành công" | cắt -f1 -d '['

Đầu ra: 2014-01-30 05:04:27 GMT

Tôi có thể thêm gì vào cuối, để chuyển đầu ra đó thành "date -d"?

Đã cố gắng:

  • [nhật ký người dùng @ máy chủ] # grep "cái gì đó" logfile.txt | grep "Thành công" | cắt -f1 -d '[' | ngày -d
  • [nhật ký người dùng @ máy chủ] # grep "cái gì đó" logfile.txt | grep "Thành công" | cắt -f1 -d '[' | ngày
  • [nhật ký người dùng @ máy chủ] # grep "cái gì đó" logfile.txt | grep "Thành công" | cắt -f1 -d '[' | ngày -d "$ 1"

Câu trả lời:


12
gmt="$(grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[')"
date -d "$gmt"

Hoặc, nếu bạn thích định dạng đường ống:

grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | { read gmt ; date -d "$gmt" ; }

Vấn đề là datekhông sử dụng stdin. Vì vậy, chúng ta phải bắt stdin thành một biến (được gọi gmtở đây) và sau đó cung cấp nó trên dòng lệnh tới date.

Đầu ra mẫu từ cách tiếp cận thứ hai:

$ echo  "2014-01-30 05:04:27 GMT" | { read gmt ; date -d "$gmt" ; }
Wed Jan 29 21:04:27 PST 2014

1
Cảm ơn bạn, điều này đã giải quyết vấn đề! Cũng đánh giá cao bạn giải thích lý do đằng sau tại sao nó không hoạt động.
Shane

18

Nếu bạn đang sử dụng ngày GNU từ một coreutils đủ gần đây, thì date -f, từ màn hình trợ giúp:

-f, --file=DATEFILE       like --date once for each line of DATEFILE

Vì vậy, nỗ lực 4 của bạn có thể là:

$ grep "something" logfile.txt | grep "Succeeded" | cut -f1 -d'[' | date -f -

-chữ viết tắt cuối cùng của stdin.


2
Đây phải là câu trả lời được chấp nhận.
Petrus K.

Có thể so sánh đầu ra của lệnh trên với một ngày cụ thể. Ví dụ. Tôi cần liệt kê tất cả các ngày cũ hơn "Thứ tư ngày 30 tháng 1 21:04:27 PST 2014"
Manu

@Manu không per se, dateutilsdategrepcho trường hợp sử dụng cụ thể đó.
hroptatyr

Điều này là rất dễ dàng hơn nhiều! Nếu chỉ tôi có thể đọc tôi có thể đã tìm thấy điều này trong trang người đàn ông.
Ken Sharp
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.