条纹毫秒部分时间

时间:2017-03-24 08:38:51

标签: awk

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

datetime='09:57:37.000000000'
hello='Hello World'
echo $datetime $hello |awk '{print sub(/\..+/,"",$datetime),$hello}'

Actual Output
1 09:57:37

Expected Output
09:57:37 Hello World
  • 我是如何实现预期输出的?
  • 道歉忘记提及我不能使用'。'作为原始问题的字段分隔符,其中有许多字段

4 个答案:

答案 0 :(得分:1)

试试这个 -

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

egrep -o "[[:digit:]][[:digit:]]:[[:digit:]][[:digit:]]:[[:digit:]][[:digit:]]" <<< $datetime
09:57:37

sed 's/.[0-9]*$//' <<<$datetime
09:57:37

awk '{sub(/\.[0-9]*$/,"")}1' <<<$datetime
09:57:37

答案 1 :(得分:1)

echo '09:57:37.000000000 Hello World'  |awk '{gsub(/\.[0-9]*/,"",$1)}1
09:57:37 Hello World

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

答案 2 :(得分:0)

希望这有帮助。

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

答案 3 :(得分:0)

我将regexps排除在外:

$ 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修改了地方变量,因此您无法打印print sub()...的结果,而是应sub(... var); print var或使用上述print substr()之类的其他方法。

然后再次你不需要awk,你可以在shell中做到这一点,bash期待:

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