2010-08-10 14 views
5

Muszę więc przekonwertować datę na inny format. Z rurociągu bash Biorę datę od ostatniego zalogowania konsoli i wyciągając odpowiednie bity się z awk, tak:Jak używać danych wyjściowych z awk w innym poleceniu?

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

które wyjścia: Aug 08 ($ 4 = sierpnia $ 5 = 08, w w tym przypadku.)

Teraz chcę wziąć "08 sierpnia" i umieścić go w komendzie date, aby zmienić format na datę numeryczną.

Która będzie wyglądać mniej więcej tak:

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

Wyjścia: 08-08

Mam pytanie jest, w jaki sposób mogę dodać, że do mojego rurociągu i używać zmiennych awk $ 4 i 5, gdzie $ "08 sierpnia" jest w tym dniu polecenia?

+0

Ty faktycznie pytaniem, jak wykorzystać wyjście z * awk, nie zmienne, w drugim poleceniu. – Cascabel

+0

Jaką wersję 'date' (i systemu operacyjnego itp.)? Data GNU nie ma '-j' i używa' -f' do odczytu z pliku. Twoją komendą będzie "date -d Sierpień \ 08 +% m-% d" –

+0

Nie jestem pewien dokładnego numeru wersji - nie ma żadnego wyjścia --version. Jest to kompilacja BSD na Mac OSX, więc zestawiłem opcje daty na podstawie strony man na OS X 10.6. Tylko zamierza uruchomić skrypt na klientach mac, ale dzięki za informacje; będzie użyteczne, jeśli będę musiał zrobić coś podobnego w Linuksie. –

Odpowiedz

5

Wystarczy użyć podstawienia polecenia:

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

Bash oceni polecenia/rurociągu wewnątrz $(...) i umieszczenia tam wynik.

+0

Idealny, działa jak urok! –

0

Zgaduję, że już próbowałeś tego?

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

Korzystanie z wstecznego kleszcza powinno zadziałać, aby wydruk wyjściowy długiego rurociągu był aktualny.

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

Nie może to mieć znaczenia w tym przypadku, ale ogólnie jest o wiele lepiej używać '$ (...)' niż backticks. Może być zagnieżdżony. – Cascabel

3

Get awk zadzwonić date:

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

procesowej lub wykorzystanie podstawienie odzyskać wyjście z awk:

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