【问题标题】:Extracting data from text file after 2 conditions have been met在满足 2 个条件后从文本文件中提取数据
【发布时间】:2023-03-31 08:48:01
【问题描述】:

我目前正在编写一个 bash 脚本,该脚本从名为 carslist.txt 的文本文件中提取数据,每辆汽车(及其相应的特征)位于不同的行中。在满足单个条件(例如下面)后,我已经能够从文本文件中提取和保存数据,但我不知道如何针对两个条件执行此操作。

单一条件示例:

grep 'Vauxhall' $CARFILE > output/Vauxhall_Cars.txt

输出:

Vauxhall:Vectra:1999:White:2
Vauxhall:Corsa:1999:White:5
Vauxhall:Cavalier:1995:White:2
Vauxhall:Nova:1994:Black:8

从上面的示例中,如果我希望在提取数据之前满足VauxhallWhite 的条件,我将如何提取数据?

上面的 grep 示例要求在提取和保存数据之前满足 Vauxhall,但我不知道如何为 2 执行此操作。我尝试将命令流水线化为 Vauxhall | White,但在那之后我是没有想法。

提前致谢。

【问题讨论】:

  • grep '^Vauxhall:' $CARFILE | grep ':White:'
  • 似乎正在创建一个输出文件但没有保存任何数据,知道为什么会这样吗?
  • grep 写入标准输出,只需将其重定向到您的输出文件名 (.. 1>youroutput.txt;)
  • 我一直把它写到 output/saveFile.txt 但它只是一个空文件
  • 是 $CARFILE 在你调用它的上下文中定义的......

标签: bash scripting grep


【解决方案1】:

我会推荐使用awk,像这样:

awk -F: '$1=="Vauxhall" && $4=="White"' input.file

由于我使用: 作为字段分隔符,我只需要检查字段 1 和 4 的值。

【讨论】:

  • 那你会在最后使用> output.file来保存提取的数据吗?
  • 是的,如果您需要将输出保存到文件中。但是不要使用> $CARFILE,这意味着不要重定向到输入文件本身,因为这会导致一个空文件。
  • 谢谢。尝试运行它,脚本完全暂停,只有在我ctrl + D out 时才结束。我已经运行了带有跟踪的脚本并且它冻结了。这是完整的行:awk -F: '$1=="Volkswagen" && $4=="Blue"' $CARLIST > output/Blue_Volkswagen.txt,格式正确吗?
  • 如果它冻结然后变量$CARLIST 是空的,这意味着它从标准输入读取。请确保$CARLIST 包含有效的文件名。
  • 天哪,我是个白痴。我的变量是 $CARFILE 而不是 $CARLIST。谢谢,效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
相关资源
最近更新 更多