从 txt 文件中提取一些文本并添加到现有文件 bash

从 txt 文件中提取一些文本并添加到现有文件 bash

所有专家

我在同一目录中有两种类型的文件

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 ...

相关内容