txtファイルからいくつかのテキストを抽出し、既存のファイルbashに追加

txtファイルからいくつかのテキストを抽出し、既存のファイルbashに追加

すべての専門家

同じディレクトリに2種類のファイルがあります

例1)Record1.txt(レコード2、レコード3、レコード4...)

11111 absda qwedc
11112 uiyds dqeds
11113 eqwev jfsec ...

ex2)Summary1.txt(要約2、要約3、要約4...)

----some data is written---- 
.....
.....
***RESULT 111.114 30.344 90.3454***  OTHERNUMBER#1 OTHERNUMBER#2 ..... 
.....
.....

私がしたいことは抽出です。結果X(数値) Y(数値) Z(数値)要約#.txtレコード。その後、その場所をそのレコード#.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と1つのファイルの単一行の一部(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

どのシェルを使用しているかを指定していないため、bash関連の文字列操作やその他の機能を使用しません。 sh互換シェルと一緒に使用する必要があります。

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

関連情報