重构时将awk输出放入变量

时间:2019-07-18 07:17:44

标签: bash awk

我正在解析网站,应将部分唤醒数据写入变量:

grep -o -E 'Date:.*Name'|sed -e 's/Date:/|/g' -e 's/Type/|/g' -e 's/Name/|/g'| awk -F '|' '{print $3"|"$1"|"$2}' 

并且只有最后一个awk应该写在变量中。

简单尝试:

body=$(awk -F '|' '{print $3"|"$1"|"$2}')| echo $body-空输出

1 个答案:

答案 0 :(得分:0)

body=$(awk -F '|' '{print $3"|"$1"|"$2}')| echo $body 
由于|创建了一个子Shell并在子Shell中执行了echo $body,因此

将给出空的输出。要使其显示body的值,请将其更改为:

body=$(awk -F '|' '{print $3"|"$1"|"$2}'); echo $body 

达到预期目标的正确方法是使用命令替换:

variable=$(grep -o -E 'Date:.*Name'|sed -e 's/Date:/|/g' -e 's/Type/|/g' -e 's/Name/|/g'| awk -F '|' '{print $3"|"$1"|"$2}' )

或者,您可以使用read来获取值,但不能在子shell外部使用它。

grep -o -E 'Date:.*Name'|sed -e 's/Date:/|/g' -e 's/Type/|/g' -e 's/Name/|/g'| awk -F '|' '{print $3"|"$1"|"$2}' | read body; echo $body
echo $body #will give empty here since the value of body existed only in subshell