2

我是 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 中实现这一点?

4

5 回答 5

3

您也可以使用 date 命令作为执行此操作的方法之一。

while IFS=, read x y; do
    date --date "$x" +%s
done < file.txt

+%s根据需要将其转换为时间戳。

于 2012-11-22T05:14:09.020 回答
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 个字段。

于 2012-11-22T02:48:18.770 回答
2

您可以使用GNU awkbash 数组获取时间戳并捕获它们:

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
于 2012-11-22T03:07:04.990 回答
1

以下将为您提取日期:

awk 'BEGIN{FS="[ ,]"; OFS=" ";} {print $1, $2}' input_file
于 2012-11-22T02:49:49.337 回答
1

使用cut命令:

cut -c1-19 file

这将从每行中提取字符 1 到 19。

只检索第一行:

head -n 1 file | cut -c1-19

并将其分配给 bash 变量:

myTime=$(head -n 1 file | cut -c1-19)
于 2012-11-22T02:52:13.130 回答