Awk 时间的一部分

Awk 时间的一部分,awk,Awk,我想从部分时间数据中提取毫秒。 这是我的尝试 输出 你知道我如何达到预期的产出吗? 抱歉忘了提到我不能使用“.”作为字段分隔符,因为原始问题中有许多字段 希望这有帮助 datetime='09:57:37.000000000' echo $datetime |awk -F'.' '{print $1}' 试试这个- echo $datetime |awk -F'[. ]' '{print $1}' 09:57:37 或 或 或 删除第一列中后跟任何内容的文字点。谢谢NeronLeVelu

我想从部分时间数据中提取毫秒。 这是我的尝试 输出

你知道我如何达到预期的产出吗? 抱歉忘了提到我不能使用“.”作为字段分隔符,因为原始问题中有许多字段 希望这有帮助

datetime='09:57:37.000000000'
echo $datetime |awk -F'.' '{print $1}'
试试这个-

 echo $datetime |awk -F'[. ]' '{print $1}'
 09:57:37


删除第一列中后跟任何内容的文字点。谢谢NeronLeVelu

我不想使用regexp:

$ echo 09:57:37.000000000 | awk '{print substr($0,1,8)}'
09:57:37
或者在完全阅读问题之后:

$ awk -v datetime="$datetime" -v hello="$hello" '
BEGIN { print substr(datetime,1,8), hello }'
09:57:37 Hello World
将变量从shell带到awk awk-v datetime=$datetime。sub修改变量的位置,所以你不能像打印sub一样打印它的结果。。。但是你应该。。。var;打印var或使用其他方法,如打印子脚本

同样,您不需要awk,您可以在shell中实现,bash期望:

$ echo ${datetime%.*} $hello
09:57:37 Hello World

抱歉,Vipin我不能使用“.”作为字段分隔符,因为有许多字段用空格分隔,所以我们可以添加。和空间场分离器。在sed的/^\[^.]*\[.0-9]\{2,\}/\1/'上使用-F'[.]'仅仅是一个注释,因为sed占用尽可能长的时间,如果行中有更长的.01234561213,它将删除第二个,而不是预期的时间。假设在开始时总有一个时间,如示例。grepThanks@NeronLeVelu的概念与您的建议相同。应该是正确的方法!++,可以使用gensub,但这非常简单。我还有许多其他字段,如$1、$2等,也需要打印出来。例如echo$datetime$fname、$name | awk'{print sub/\..+/、$datetime、$datetime}'但是只有时间应该从DateTime中剥离。请添加输入数据的示例。嗨,PS,抱歉,伙计,我已经在输入中添加了一个示例data@jhon.smith,请在回答中查看我的更新。希望您可以通过更改GSUB中的列号来使用它您的尝试背后的原因是什么?在我将其发布到这里之前,我想简化示例,但最终将其过于简单化。我现在已经对问题进行了更正否,我是指echo$datetime$hello | awk'{print sub/\+/,$datetime,$hello}
awk '{sub(/\.[0-9]*$/,"")}1' <<<$datetime
09:57:37
echo '09:57:37.000000000 Hello World'  |awk '{gsub(/\.[0-9]*/,"",$1)}1
09:57:37 Hello World
$ echo 09:57:37.000000000 | awk '{print substr($0,1,8)}'
09:57:37
$ awk -v datetime="$datetime" -v hello="$hello" '
BEGIN { print substr(datetime,1,8), hello }'
09:57:37 Hello World
$ echo ${datetime%.*} $hello
09:57:37 Hello World