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.