linux - 不包含字符串的处理行和匹配行下方的输出行

标签 linux bash unix awk grep

我很清楚我可以在这里做什么,使用 grep -v '^--'grep -A 1,但是我想我可能需要改为使用 awk 进行匹配。

我有这样的数据:

Random text line 1
--Data1
Random text line 2
--Data2
Random text line 3  
--Data3
Random text line 4  
--Data4
Random text line 5  
--Data5

问题是,我需要运行一个命令 - 让我们在所有不以“--”开头的行上将其称为 command1 并捕获输出及其下面的行。

所以我要组合的三个命令是:

grep -v '^--' file.txt | command1 > 文本输出

grep -A 1 [不确定] > --data-below-text

我可能可以通过在 while read 行中存储变量来做到这一点; do 类型的命令,然后存储和回显变量。但是,我觉得可能有一种更简单、更有效的方法来获得以下内容:

Random text line 1, text-output, --Data1
Random text line 2, text-output, --Data2
Random text line 3, text-output, --Data3
Random text line 4, text-output, --Data4
Random text line 5, text-output, --Data5

当然,如果使用变量是唯一的方法,我也愿意这样做。我只是想确定一下,因为我知道如果我决定在以后并行使用代码,变量可能会变得冒险。非常感谢任何方向。

最佳答案

这里有一个方法:

command_wrapper(){
  in=$(cat -)
  one=$(echo "$in" | head -n1)
  two=$(echo "$in" | tail -n1)
  result=$(echo "$one" | command1)
  echo "$one, $result, $two"
}

grep -A1 -v '^--' file.txt | command_wrapper

还有一种方法:

textlines=$(grep -v '^--' file.txt)
results=$(echo "$textlines" | command1)
datalines=$(grep '^--' file.txt)
paste <(echo "$textlines") <(echo "$results") <(echo "$datalines") |
  tr '\t' ',' > output.txt

关于linux - 不包含字符串的处理行和匹配行下方的输出行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39653853/

相关文章:

mysql - 确定 CentOS 6 Apache 服务器运行缓慢的问题

javascript - 如何在网页中访问硬盘中的文件

c++ - 未实现 : unexpected ast of kind ltgt_expr in C++

linux - 使用 sed 中的变量通过用户选择删除行号

linux - 为什么我会获得这些文件权限?

正则表达式匹配列的第一个字符

linux - 如何从 linux 内核内部生成稳定的 37kHz GPIO 触发器?

python - 如何写一个 .sh 文件让我的 Linux 系统直接使用 ./hello 运行 python 文件

bash - 在命令行上获取当前年份

linux - 我怎样才能得到这个月的最后一天 Shell 脚本