我想从部分时间数据中划出毫秒数。 这是我的尝试 输出
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
答案 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