Bagaimana cara menyalurkan output ke date -d “value”?


13

Saya memiliki tanggal seperti "2014-01-30 05:04:27 GMT", dan jika saya menjalankan date -d "2014-01-30 05:04:27 GMT", hasilnya ada di zona waktu server saya ("Kam 30 Jan 16:04:27 EST 2014 ").

Dengan menggunakan grep and cut, saya telah mengekstrak tanggal dalam GMT dari sebuah file. Namun, saya berjuang untuk kemudian mengubahnya menjadi waktu lokal saya.

Sebagai contoh:

[user @ server log] # grep "something" logfile.txt | grep "Berhasil" | cut -f1 -d '['

Output: 2014-01-30 05:04:27 GMT

Apa yang bisa saya tambahkan di akhir, untuk meneruskan keluaran itu ke "date -d"?

Diupayakan:

  • [user @ server log] # grep "something" logfile.txt | grep "Berhasil" | cut -f1 -d '[' | date -d
  • [user @ server log] # grep "something" logfile.txt | grep "Berhasil" | cut -f1 -d '[' | tanggal
  • [user @ server log] # grep "something" logfile.txt | grep "Berhasil" | cut -f1 -d '[' | date -d "$ 1"

Jawaban:


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

Atau, jika Anda lebih suka format pipa:

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

Masalahnya adalah bahwa datetidak menggunakan stdin. Jadi, kita harus menangkap stdin ke dalam variabel (disebut di gmtsini) dan kemudian menyediakannya di baris perintah ke date.

Sampel keluaran dari pendekatan kedua:

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

1
Terima kasih, ini menyelesaikan masalah! Juga menghargai Anda menjelaskan alasan di balik mengapa itu tidak berhasil.
— Shane

19

Jika Anda menggunakan tanggal GNU dari coreutils yang cukup baru, ada date -f, dari layar bantuan:

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

Jadi usaha Anda 4 bisa jadi:

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

-singkatan terakhir dari stdin.


2
Ini harus menjadi jawaban yang diterima.
— Petrus K.

Apakah mungkin untuk membandingkan output dari perintah di atas dengan tanggal tertentu. Misalnya. Saya perlu mencantumkan semua tanggal yang lebih lama dari "Rab 30 Jan 21:04:27 PST 2014"
— Manu

@ Manu tidak per se, dateutils miliki dategrepuntuk kasus penggunaan khusus itu.
— hroptatyr

Ini jauh lebih mudah! Kalau saja aku bisa membaca, aku mungkin sudah menemukan ini di halaman manualnya.
— Ken Sharp
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.