【问题标题】:Complex operation with bash script使用 bash 脚本进行复杂操作
【发布时间】:2020-02-27 09:15:07
【问题描述】:

我得到了一个包含几行的文档,其中一些包含下面的字符串,我需要做的是显示所有其他行(已经被 grep 过滤),每当这个字符串出现时,将数字乘以 2500并将结果显示在同一列中。

-其他列- 只是一个占位符,用于证明其他列存在于其前后:value=All 968.0

-other columns-  value=All 968.0 -other columns- 

这可能吗?

我已经尝试过以下操作,但它只返回具有数学运算的列,并在所有行中进行运算,我只希望在第六列中包含“value=All”的行中进行运算。

grep wordFilter file.txt | sed -e 's/wordsToDelete//g' | if grep -q value=All ; then awk '{print $7*2500}' ; fi

这是重要的部分:

 if grep -q value=All ; then awk '{print $7*2500}' ; fi

【问题讨论】:

  • 当然可以。在awk 中最容易做到这一点。
  • 我们鼓励 SO 上的所有用户发布他们为解决自己的问题所做的努力,所以请在您的问题中添加相同的内容并让我们知道。

标签: linux bash centos


【解决方案1】:

代码使用 grep/awk 管道来执行过滤。但是,grep -q 将消耗管道的所有输出,并且不会有数据进入awk。考虑

# Print just lines with value=A::
grep wordFilter file.txt | sed -e 's/wordsToDelete//g' | awk '/value=ALL/ {$4 = $4*2500 ; print }'

# Or print all lines
grep wordFilter file.txt | sed -e 's/wordsToDelete//g' | awk '/value=ALL/ {$4 = $4*2500 } { print }'

根据样本输入,该值似乎在第 4 列,因此 $4 而不是 $7

【讨论】:

  • 嗨,谢谢,但这只返回包含“value=All”的行我还需要其他不包含字符串的行。
  • 你能试试第二个命令吗(用'打印所有行')-它应该在输出中包含'其他行'
猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 2010-09-30
  • 1970-01-01
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2014-08-19
  • 1970-01-01
相关资源
最近更新 更多