我很清楚我可以在这里做什么,使用 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/