我有一个文件test.cf,它包含:
process {
withName : teq {
file = "/path/to/teq-0.20.9.txt"
}
}
process {
withName : cad {
file = "/path/to/cad-4.0.txt"
}
}
process {
withName : sik {
file = "/path/to/sik-20.0.txt"
}
}我想收回to、cad和sik文件末尾关联的值。
我第一次想到的是
grep -E 'teq' test.cf只获得第二次原始数据,然后在线删除部分重复出现的内容。
但是,做这样的事情可能更容易:
for a in test.cf
do
line=$(sed -n '{$a}p' test.cf)
if line=teq
#next line using sed -n?
do print nextline &> teq.txt
else if line=cad
do print nextline &> cad.txt
else if line=sik
do print nextline &> sik.txt
done(显然不起作用)
编辑:
输出需要: teq.txt包含teq-0.20.9,cad.txt包含cad-4.0,sik.txt包含sik-20.0
有什么好办法吗?谢谢你的评论
发布于 2022-04-14 13:44:56
以下是awk中的一个解决方案:
awk '/withName/{name=$3} /file =/{print $3 > name ".txt"}' test.cf/withName/{name=$3}:当我看到包含"withName“的行时,当我看到带有”withName =“的行时,我保存名称发布于 2022-04-14 13:42:09
根据您给定的样本:
awk '/withName/{close(f); f=$3 ".txt"}
/file/{sub(/.*\//, ""); sub(/\.txt".*/, "");
print > f}' ip.txt如果
/withName/{close(f); f=$3 ".txt"}行包含withName,则使用第三个字段在f中保存文件名。如果行包含handle/file/{sub(/.*\//, ""); sub(/\.txt".*/, "");,则close()将关闭以前的任何文件,删除除值requiredprint > f之外的所有内容,打印修改后的行,并重定向到f >>而不是>)。
https://stackoverflow.com/questions/71870295
复制相似问题