如何用awk打印最后4列?特殊字符场景报错解决
如何用awk提取带空格的特定结尾内容
你遇到的问题本质是awk默认按空格(包括多个连续空格)分割字段,导致你想要的(0 hrs 0 mins 0.009 Secs)被拆成了多个独立字段,而非一个整体。下面提供两种直接的解决方案:
方案1:匹配括号开头的结尾内容
如果目标内容总是以(开头,直接提取从(到行尾的部分最省心:
echo "2023-01-03 01:05:06: Table test completed (0 hrs 0 mins 0.009 Secs)" | awk '{sub(/.*\(/, "("); print}'
原理:用sub函数把行首到第一个(的所有内容替换成单个(,剩下的就是你要的完整内容。
方案2:提取从指定字段到结尾的所有内容
如果你能确定目标内容从第6个字段开始(前面的字段依次是2023-01-03、01:05:06:、Table、test、completed),可以通过循环拼接字段实现:
echo "2023-01-03 01:05:06: Table test completed (0 hrs 0 mins 0.009 Secs)" | awk '{ result = $6 for (i=7; i<=NF; i++) { result = result " " $i } print result }'
这种方式更灵活,只要确定起始字段位置,就能提取后续所有内容,不会受特殊字符影响。
补充说明:你之前的命令并没有语法错误,只是输出不符合预期——因为按空格分割后,最后4个字段是0、mins、0.009、Secs),所以才会得到错误的输出结果。
内容的提问来源于stack exchange,提问作者Christopher Karsten
相关产品推荐
相关产品推荐

