所以,代码中的一切都运行良好,除了一个小小的东西。
这部分:
if [ "$LIMITHOURS" -gt "0" -a "$LIMITHOURS" -lt "24" ]; then
x=$(($LIMITHOURS*60*60))
fi
SDATE=$( echo "01/jan/2003:11:00:06 +0100"| sed 's/[/]/ /g' |sed 's/:/ /')
EDATE=$(date --date "$SDATE - $x seconds" +"%d%m%Y%H%M%S")
#echo "$SDATE"
#echo "$EDATE"
while read LINE; do
CDATE=$( awk '{print $4}'| sed 's/[[]//' | sed 's/[/]//g' |sed 's/://g' )
DATE=$(date --date "$CDATE" +"%d%m%Y%H%M%S")
#echo "$CDATE"
done < "$FILENAME"
当我尝试运行脚本时,收到错误消息“date:Argument list too too “我知道问题出在while循环中,有:
DATE = $(日期 - 日期“$ CDATE”+“%d%m%Y%H%M%S”)
任何知道任何解决方案的人?我希望日期格式为ddmmYYYYHHMMSS,例如。 23102002120022
您可以在此处找到其余的脚本:http://pastebin.com/PMk2QDre
答案 0 :(得分:1)
此代码:
while read LINE; do
CDATE=$( awk '{print $4}'| sed 's/[[]//' | sed 's/[/]//g' |sed 's/://g' )
DATE=$(date --date "$CDATE" +"%d%m%Y%H%M%S")
#echo "$CDATE"
done < "$FILENAME"
会将$FILENAME
中的一行读入变量LINE
,但第一次调用awk
正在读取其余行。生成的CDATE
值可能太大而无法放入单个命令行中,更不用说包含太多日期了。你可能想要
echo "$LINE" | awk '{print $4}' | ...
然而,从LINE
中删除不良字符的更简单方法是
CDATE=${LINE//[\/[:]}