bash - 重构时将 awk 输出放入变量中
问题描述
我正在解析网站,awked 数据的某些部分应该写在变量中:
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
- 空输出
解决方案
body=$(awk -F '|' '{print $3"|"$1"|"$2}')| echo $body
将给出空输出,因为|
创建了一个子shell并执行了echo $body
in 子shell。要使其显示 的值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 来获取值,但不能在 subshell 之外使用它。
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
推荐阅读
- pandas - 使用 groupby.tail 后如何创建数据框
- python - How to add top level column to the existing dataframe in Python?
- multithreading - 如何正确终止阻塞的线程(Lparallel Common Lisp)
- dart - Flutter - how do I send/receive data between different class?
- asp.net-core - ASPNETCORE_ENVIRONMENT 未在动态生成的 Web.config 中设置
- cakephp - Cakephp 2.x 搜索时分页错误
- html - img-fluid 没有正确调整图像高度
- java - 有没有办法使用字符串数组而不是数组列表来编写它?
- spring-boot - 如何使用 Spring Boot 和 ActiveMQ Artemis 进行复制?
- sql-server - SSRS 2016 不打开订阅页面或让我添加订阅