我想提取 CSV 文件中第 4 列包含特定数字的行。
CSV 文件的行如下所示:
Markus;Haltmeyer;ID;SomeIdentifier
如果 SomeIdentifier
已找到,我想将第一列和第二列分别存储在不同的变量中。
在 bash 脚本中,变量 firstPartOfID
中只有 SomeIdentifier
的第一个字符。但无论如何,使用以下命令可以找到正确的行:
result=$(awk -v pat="${firstPartOfID}" -F ";" '$0~pat{print $1, $2 }' MyFile.csv)
echo ${result}
不幸的是结果
包含两列。之后我可以尝试拆分 $result,但我想直接使用 awk 来完成。
最佳答案
您可以将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 }')
我在上面的示例中使用 ;
作为输出分隔符。使用它是有意义的,因为它也是输入分隔符,因此保证它不包含在数据中。
顺便说一句,您可以使用 awk 中的 index()
函数来代替使用正则表达式。这样效率会更高。
awk -v id_prefix="${firstPartOfID}" -F ";" 'index($3, id_prefix){print $1, $2 }'
关于bash - 将 awk 结果存储在 bash 脚本的变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51949173/