本周我倾向于如何使用awk和sed。我知道之前可能会问过这个问题,但我不确定我的脚本有什么问题。我有三个文件,我使用grep搜索模式gge0001x gge0001y gge0001z。 x在file1中,y在文件2中,z在file3中。如果有人想看L2E [1-3] .iva,他们就在这里:https://gist.github.com/anonymous/1112988408874c730cd4f3d313226ba4
#!/bin/bash
echo "Performance Data"
sed -n '1,19p' L2E1.iva|cat > file1 #take lines 1-19 in L2E1 and take the
# output into file1. The next two commands do the same thing
sed -n '1,19p' L2E2.iva|cat > file2
sed -n '1,19p' L2E3.iva|cat > file3
curveName=`grep "F" file1|sed "s/F/ /"`
# This will search for F in file 1, and then substitute F with a space
curveName2=`grep "F" file2|sed "s/F/ /"`
curveName3=`grep "F" file3|sed "s/F/ /"`
echo "Curve Name" "$curveName $curveName2 $curveName3"
我希望我的输出为Curve Name gge0001x gge0001y gge0001z。但输出是这样的: 性能数据gge0006ze gge0006x
如果我自己回应它们那么它很好,但是一旦我在同一条线上回显所有三个,输出就会变得偏斜。为什么x在第一次显示时会显示在我回显它的位置以及我的y去哪里?
答案 0 :(得分:0)
最初的一些提示:
sed -n '1,19p' L2E1.iva|cat > file1
您可以省略cat
将sed
的输出直接重定向到文件:
sed -n '1,19p' L2E1.iva > file1
curveName=`grep "F" file1|sed "s/F/ /"`
使用$()
代替反引号进行流程替换:
curveName=$(grep "F" file1 | sed "s/F/ /")
但输出是这样的:性能数据gge0006ze gge0006x
输出中效果数据的原因是,您在脚本开头echo
。
此外,您在最后echo
:$曲线 n ame2 - >中输入了拼写错误。 $ curve N ame2,这就是您的 y 缺失的原因。
您是否仔细检查过您的文件以获取正确的内容?这是我能想象的唯一原因,为什么你的 x 是最后一个,而 z 是第一个。
答案 1 :(得分:0)
您可以将脚本压缩成一行
$ echo Curve name $(grep -Pohm1 '(?<=F ).*' L2E{1..3})
Curve name gge0006x gge0006y gge0006z
练习是搜索grep