将awk结果存储在bash脚本中的变量中

萨迪克

我想提取CSV文件的行,其中第4列包含某个数字。

CSV文件的行如下所示:

Markus;Haltmeyer;ID;SomeIdentifier

我想将第一列和第二列分别存储在不同的变量中(如果SomeIdentifier不习惯的)。

在bash脚本中SomeIdentifier,变量中只包含的第一个字符firstPartOfID但是,仍然可以使用以下命令找到正确的行:

result=$(awk -v pat="${firstPartOfID}" -F ";" '$0~pat{print $1, $2 }' MyFile.csv)
echo ${result}

不幸的是同时result包含两个列。我可以尝试在之后拆分$ result,但我想直接使用awk进行拆分。

hek2mgl

您可以将其read与流程替换一起使用:

read var1 var2 < <(awk -v regexp="${firstPartOfID}" -F ";" '$0~regexp{print $1, $2 }')

我假设输出不包含空格(定界符除外)。否则,您需要在awk中使用其他输出定界符,并在read中使用它:

IFS=";" read var1 var2 < <(awk -v regexp="${firstPartOfID}" 'BEGIN{FS=OFS=";"}$0~regexp{print $1, $2 }')

;在上面的示例中,我将用作输出定界符。使用它很有意义,因为它也是输入定界符,因此可以保证它不包含在数据中。


顺便说一句,您可以index()在awk中使用该函数,而不是使用正则表达式这样会更有效率。

awk -v id_prefix="${firstPartOfID}" -F ";" 'index($3, id_prefix){print $1, $2 }'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章