我有一个包含1000行各种纪元时间的txt文件(1396848990 = 2014年4月6日星期二太阳报6:36:30)。如何计算晚上8点到午夜之间发生的行数。
答案 0 :(得分:1)
您可以使用awk
执行以下操作:
awk 'int(strftime("%H", $1)) >= 20 {print $1}' $input_file | wc -l
它会使用strftime()
将unix纪元时间戳转换为小时(%H
),将其转换为整数(int()
)并与数字20进行比较。如果数字是更大 - 打印时间戳。
在外面,wc
可以计算打印的行数。
当然,您也可以使用awk
:
awk 'int(strftime("%H", $1)) >= 20 {n+=1} END{print n}' $input_file
它会默默地将变量n
初始化为零,并在结尾打印结果。
修改:strftime()似乎exist in GNU awk:
$ awk -V
GNU Awk 4.1.3, API: 1.1 (GNU MPFR 3.1.4, GNU MP 6.1.0)
答案 1 :(得分:0)
虽然awk
肯定更快更容易阅读,但我认为你只能使用(现代)bash
来做到这一点。
这样的事情应该有效:
let counter=0; (while read -ra epoch; \
do [ $(printf "%(%H)T" ${epoch[0]}) -ge 20 ] && \
let "counter++"; done; echo $counter) <inputfile
它像Pavels一样回答,但用bash的printf来格式化日期(可能仍然在窗帘后面strftime
)。
read
数组(-a
)和let counter++
仅适用于现代bash(4?)
答案 2 :(得分:0)
如果您的private string Utf8y(string a)
{
return Encoding.UTF8.GetString(Encoding.Default.GetBytes(a));
}
命令支持-d( - 日期)选项,那么如何:
date