2017-04-21 79 views
-1

我有許多組對應的.txt文件。我想識別第一個.txt文件(text1.txt)中的特定字符":",然後用其他.txt文件(text2.txt)中的相應行替換它(以及text1.txt中其餘行) 。我還想在複製的值之前添加一個額外的字符"*"sed:用公認的字符替換文本文件中的部分行與另一個文件中的整行

text1.txt看起來是這樣的:

* 
10.04:60.429 
* 
* 
* 
12.023:60.078 
* 
9.033:60.045 
* 
9.023:60.062 
* 
* 

和text2.txt看起來是這樣的:

* 
11 
* 
* 
* 
4 
* 
10 
* 
9 
* 
* 

輸出應該是這樣的:

* 
10.04*11 
* 
* 
* 
12.023*4 
* 
9.033*10 
* 
9.023*9 
* 
* 

任何想用sed做這件事的最佳方法?

+0

你嘗試過這麼遠嗎? – sjsam

+0

sed -i和sed -e但我無法動態地從第二個文本文件中找到值,並且在不知道要替換的值的情況下替換部分行 – Kosagl

回答

0

下面awk腳本應該做

awk 'BEGIN{i=1;j=1} 
    NR==FNR{text1[i++]=$0;next} 
    /:/{gsub(/:[^:]*/,"*" text1[j],$0)} 
    #Note :[^:] looks for the last occurence of : in text1 strings 
    {j++}1' text2.txt text1.txt 

結果

* 
10.04*11 
* 
* 
* 
12.023*4 
* 
9.033*10 
* 
9.023*9 
* 
* 
+0

有沒有理由在此使用awk而不是sed? – Kosagl

+0

@Kosagl好的,你需要記住一個文件中的東西,並在另一個文件中使用它。與sed會很乏味 – sjsam

相關問題