2011-01-25 104 views
7

我值$dates數組,我轉變:UNIX地圖功能

for i in $dates 
do 
    date -d "1970-01-01 $i sec UTC" '+%a_%D' 
done 

有沒有辦法救這個操作的結果,所以我可以管到別的東西,沒有它寫入文件在磁盤上?

+2

你是否被限制爲bash?如果沒有,我建議在Perl中做這個... map是包的一部分。 – DVK 2011-01-25 03:16:21

+0

你的陣列有多大? 10s,100s,1000s,更大?爲什麼它不能寫入磁盤?你能否將結果保存在另一個陣列中?爲什麼不? – 2011-01-25 03:40:08

+0

你的`date`版本是否支持`date -d「@ $ i」'+%a_%D'`? – 2011-01-25 06:24:52

回答

6

創建一個函數:

foo() { 
     for i in [email protected] 
     do 
       date -d "1970-01-01 $i sec UTC" '+%a_%D' 
     done 
} 

然後你可以如輸出發送到標準錯誤:

echo `foo $dates` >&2 
2

您可以將它寫入FIFO - 一個看起來像文件的「命名管道」。

維基百科有其使用的一個體面的例子:http://en.wikipedia.org/wiki/Named_pipe

+0

命名管道非常有趣,謝謝!不過,我一直在陷入僵局。需要了解更多關於它們的信息。 – pokerface 2011-01-25 03:27:10

3

你的問題是有點模糊,但下面的工作:

for ... 
do 
... 
done | ... 
1

編輯,沒有看到整個文件的事情:

for i in $dates ; do 
    date -d "1970-01-01 $i sec UTC" '+%a_%D' 
done |foo 
+0

op特別提到不想將數據寫入文件。 – 2011-01-25 03:25:32

1

如果使用bash,你可以使用數組:

q=0 
for i in $dates 
do 
    DATEARRAY[q]="$(date -d "1970-01-01 $i sec UTC" '+%a_%D')" 
    let "q += 1" 
done 

然後,您可以回顯/管理該數組到另一個程序。請注意,數組是特定於bash的,這意味着這不是一個可移植的(好吧,超出系統的bash)解決方案。

11

既然你說「轉化」我假設你的意思是你想捕捉的環路的輸出變量。你甚至可以替換你的$dates變量的內容。

dates=$(for i in $dates; do date -d "@$i" '+%a_%D'; done)