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