2011-01-25 50 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)