使用 AWK 打印逗号分隔字段的一部分

Print part of a comma-separated field using AWK

我有一行包含这个字符串:

$DLOAD , 123 , Loadcase name=SUBCASE_1

我试图只打印 SUBCASE_1。这是我的代码,但出现语法错误。

awk -F, '{n=split(,a,"="); a[n]} {printf(a[1]}' myfile

我该如何解决这个问题?

第一个解决方案: 如果您只想获取最后一个字段(其中包含 =),则使用您展示的样品请尝试关注

awk -F',[[:space:]]+|=' '{print $NF}' Input_file


第二个解决方案: 或者,如果您想在 = 之后专门获取第三个字段的值,请尝试遵循 awk 代码。只需将逗号后跟 space(s) 作为字段分隔符,并在主程序中将第 3 个字段的存储值拆分到 arr 数组中,然后打印 arr 数组的第 2 个项目值。

awk -F',[[:space:]]+' '{split(,arr,"=");print arr[2]}' Input_file

可能最短的解决方案是:

awk -F= '{print $NF}' file

您只需使用 '=' 作为 field-separator,然后打印最后一个字段。

例子Use/Output

heredoc 中使用您的示例并引用印记以防止扩展 $DLOAD,您将:

$ awk -F= '{print $NF}' << 'eof'
> $DLOAD , 123 , Loadcase name=SUBCASE_1
> eof
SUBCASE_1

(当然,在这种情况下,$DLOAD 是否扩展可能无关紧要,但为了完整性,万一 $DLOAD 包含另一个 '=' ...)