我是bash的新手,我有一个这样的文件:
2012-11-22 11:36:55,909 1353551815756 1353551815909 0 true myapi 10 203051 203051:ShopDb:ShopDb
2012-11-22 11:37:00,292 1353551820146 1353551820292 0 true myapi 10 201897 201897:ShopDb:ShopDb
2012-11-22 11:38:01,824 1353551881672 1353551881824 0 true myapi 10 203051 203051:ShopDb:ShopDb
在一个循环中,我希望提取日期部分(2012-11-22 11:36:55)转换为时间戳并分配给变量(或简称为dis 如何在bash中实现这一点?
答案 0 :(得分:3)
您也可以使用日期命令作为其中一种方法。
while IFS=, read x y; do
date --date "$x" +%s
done < file.txt
+%s
可以根据需要将其转换为时间戳。
答案 1 :(得分:2)
$ while IFS=" ," read f1 f2 f3
> do
> echo $f1 $f2
> done < file
2012-11-22 11:36:55
2012-11-22 11:37:00
2012-11-22 11:38:01
通过将IFS设置为空格并使用逗号可以轻松提取while循环中的前2个字段。
答案 2 :(得分:2)
您可以使用GNU awk
获取时间戳并使用bash数组捕获它们:
array=($(awk -F, '{ print mktime(gensub(/[:-]/," ","g",$1))}' file.txt))
然后你可以迭代它们:
for i in "${array[@]}"; do echo "$i"; done
结果:
1353548215
1353548220
1353548281
或者只需选择一个进行打印;例如,要回显第二个元素:
echo "${array[1]}"
结果:
1353548220
答案 3 :(得分:1)
以下内容将为您提取日期:
awk 'BEGIN{FS="[ ,]"; OFS=" ";} {print $1, $2}' input_file
答案 4 :(得分:1)
使用cut
命令:
cut -c1-19 file
这将从每一行中提取字符1到19。
要检索第一行:
head -n 1 file | cut -c1-19
并将其分配给bash变量:
myTime=$(head -n 1 file | cut -c1-19)