2010-08-10 12 views
5

Vì vậy, tôi cần chuyển đổi ngày sang định dạng khác. Với một đường ống dẫn bash, tôi lấy ngày từ giao diện điều khiển đăng nhập cuối cùng, và kéo các bit tương ứng với awk, như vậy:Làm cách nào để sử dụng đầu ra từ awk trong một lệnh khác?

last $USER | grep console | head -1 | awk '{print $4, $5}' 

Những kết quả đầu ra: Aug 08 ($ 4 = Tháng Tám $ 5 = 08, trong trường hợp này.)

Bây giờ, tôi muốn lấy 'ngày 08 tháng 8' và đặt nó vào lệnh date để thay đổi định dạng thành ngày số.

Trong đó sẽ giống như thế này:

date -j -f %b\ %d Aug\ 08 +%m-%d 

Đầu ra: 08-08

Câu hỏi tôi có là, làm thế nào để tôi thêm rằng để đường ống của tôi và sử dụng các biến awk $ 4 và $ 5 nơi 'Ngày 08 tháng 8' nằm trong lệnh ngày đó?

+0

Bạn đang thực sự hỏi làm thế nào để sử dụng * đầu ra * từ awk, không phải là biến, trong lệnh khác. – Cascabel

+0

Phiên bản 'ngày' nào (và hệ điều hành, v.v.)? Ngày GNU không có '-j' và nó sử dụng' -f' để đọc từ một tệp. Lệnh của bạn sẽ là 'date -d Aug \ 08 +% m-% d' –

+0

Không chắc chắn về số phiên bản chính xác - không có bất kỳ loại đầu ra -version nào. Đó là một BSD được xây dựng trên Mac OSX, vì vậy tôi đã tập hợp các tùy chọn ngày dựa trên trang người đàn ông trên OS X 10.6. Chỉ có ý định chạy tập lệnh trên máy khách mac, nhưng cảm ơn thông tin; nó sẽ hữu ích nếu tôi cần phải làm một cái gì đó tương tự trên Linux. –

Trả lời

5

Bạn chỉ cần sử dụng thay thế lệnh:

date ... $(last $USER | ... | awk '...') ... 

Bash sẽ đánh giá các lệnh/đường ống bên trong $(...) và đặt kết quả đó.

+0

Hoàn hảo, hoạt động như một sự quyến rũ! –

0

Tôi đoán bạn đã thử điều này?

last $USER | grep console | head -1 | awk | date -j -f %b\ %d $4 $5 +%b-%d 
0

Sử dụng bọ ve sẽ hoạt động để có được đầu ra của đường ống dài của bạn thành ngày.

 
date -j -f %b\ %d \`last $USER | grep console | head -1 | awk '{print $4, $5}'\` +%b-%d 
+1

Nó có thể không quan trọng trong trường hợp này, nhưng nói chung nó là tốt hơn để sử dụng '$ (...)' hơn backticks. Nó có thể được lồng nhau. – Cascabel

3

Nhận awk gọi date:

... | awk '{system("date -j -f %b\ %d \"" $4 $5 "\" +%b-%d")}' 

Hoặc quá trình sử dụng thay thế để lấy ra từ awk:

date -j -f %b\ %d "$(... | awk '{print $4, $5}')" +%b-%d