我想提取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进行拆分。
您可以将其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] 删除。
我来说两句