Date awk:防止结果被解释为shell命令

Date awk:防止结果被解释为shell命令,date,awk,Date,Awk,我有如下几对日期 2012-11-23T09:26:20 2012-11-23T09:26:48 2012-11-23T09:26:48 2012-11-23T09:26:48 2012-11-23T09:26:26 2012-11-23T10:49:38 2012-11-23T10:49:38 2012-11-23T10:49:38 2012-11-23T09:26:30 2012-11-23T12:17:13 2012-11-23T12:17:13 2012-11-23T12:17

我有如下几对日期

2012-11-23T09:26:20 2012-11-23T09:26:48 
2012-11-23T09:26:48 2012-11-23T09:26:48 
2012-11-23T09:26:26 2012-11-23T10:49:38 
2012-11-23T10:49:38 2012-11-23T10:49:38 
2012-11-23T09:26:30 2012-11-23T12:17:13 
2012-11-23T12:17:13 2012-11-23T12:17:13 
2012-11-23T09:26:33 2012-11-23T13:39:52 
2012-11-23T13:39:52 2012-11-23T13:39:52
我想找出每行的两个日期之间的差异。到目前为止我有

awk '{cmd="$(( ( $(date -ud \""$2"\" +\"%s\") - $(date -ud \""$1"\" +\"%s\") ) ))"; cmd | getline diff; print diff }' < submit_start.txt
我似乎将结果解释为一个shell命令并打印“diff”
似乎增加了一条新线。我做错了什么?

您的命令中缺少一个
回音

awk '{cmd="echo $(( ( $(date -ud \""$2"\" +\"%s\") - $(date -ud \""$1"\" +\"%s\") ) ))"; cmd | getline diff; print diff }' file

如果没有
echo
,您将尝试以命令的形式执行每个结果。我还删除了时间函数使用GNU awk的

$ gawk '{print secs($2) - secs($1)} function secs(t){gsub(/[^0-9]/," ",t); return mktime(t)}' file   
28
0
4992
0
10243
0
15199
0

++为了勇气,但你知道你可以不用awk就做到,对吧<代码>读取dt1 dt2时;do echo$(日期$dt1…日期$dt2…);done
。祝你好运!别忘了测试getline的结果,然后关闭cmd,即
cmd | getline diff
应该更像
diff=((cmd | getline)>0?line:-1);关闭(cmd)
。请参阅如何/何时使用getline。
awk '{cmd="echo $(( ( $(date -ud \""$2"\" +\"%s\") - $(date -ud \""$1"\" +\"%s\") ) ))"; diff = ( (cmd | getline line) > 0 ? line : -1 ); close(cmd); print diff }' file
while read -r dt1 dt2; do
    echo "$(( $(date -ud "$dt2" +%s) - $(date -ud "$dt1" +%s) ))"
done < file
$ gawk '{print secs($2) - secs($1)} function secs(t){gsub(/[^0-9]/," ",t); return mktime(t)}' file   
28
0
4992
0
10243
0
15199
0