所有专家
我在同一目录中有两种类型的文件
ex1) record1.txt (record2, record3, record4 ...)
11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...
ex2) Summary1.txt (Summary2, Summary3, Summary4 ...)
----some data is written----
.....
.....
***RESULT 111.114 30.344 90.3454*** OTHERNUMBER#1 OTHERNUMBER#2 .....
.....
.....
我想做的就是提取结果 X(数字) Y(数字) Z(数字)Summary#.txt 的记录。然后,将这些位置放入相应的 record#.txt 中,但我想添加一些信息,如下所示
X Y Z
111.114 30.344 90.3459
11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...
所以,我希望我的最终文件 record#.txt 可以在上面看到。我尝试了 sed 和 cat...都失败了。
提前致谢!
答案1
如果我没理解错的话,我的建议是:
for i in record*.txt; do
xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)
sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}
done
循环遍历名为的文件record*.txt
for i in record*.txt; do
RESULT
捕获和之间的字符串***
xyz=$(grep -oP "(?<=RESULT ).*(?=\*\*\*)" $i)
在文件中的第一行添加 XYZ,后面是捕获的图案summary*.txt
sed -i "1 iX Y Z\n$xyz\n" summary${i//record/}
答案2
这只是具有固定文本 ( ) 的行X Y Z
和一个文件中的单行的一部分 ( SummaryX.txt
) 以及具有相关文件名 ( recordX.txt
)的另一个文件的全部内容的简单串联
#!/bin/sh
for sfile in Summary*.txt; do
rfile="$(echo "$sfile" | sed -e 's/^Summary/record/')"
ofile="$rfile.new"
{
echo X Y Z
sed -E -n -e 's/^.*RESULT ([0-9.]+ [0-9.]+ [0-9.]+).*/\1/p' "$sfile"
echo
cat "$rfile"
} > "$ofile"
# uncomment the following to replace the original record file with the new one.
# mv -f "$ofile" "$rfile"
done
您还没有说明您正在使用哪个 shell,因此这不会使用任何 bash 特定的字符串操作或其他功能。它应该与任何兼容 sh 的 shell 一起使用。
recordX.txt.new
除非您取消注释该行,否则输出将被存储mv
。这样您就可以验证它是否符合您的要求前它会破坏您的原始输入文件(无论如何,在执行可能具有破坏性的操作时,您都应该处理备份副本)。
$ cat record1.txt.new
X Y Z
111.114 30.344 90.3454
11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...