Linux
從 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 ..... ..... .....
我要做的就是提取Summary#.txt 的RESULT X(number) Y(number) Z(number)。然後,把這些位置放到對應的record#.txt中,但是我想添加一些資訊,像這樣
X Y Z 111.114 30.344 90.3459 11111 absda qwedc 11112 uiyds dqeds 11113 eqwev jfsec ...
所以,我希望我的最終文件 record#.txt 可以在上面查看。我試過 sed 和 cat ……都失敗了。
提前致謝!
如果我理解正確,這是我的建議:
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/}
這只是具有固定文本的行 (
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 ...