2012-03-27 48 views
1

我有兩個文件。使用在Linux中的sed替換另一個文件的列的文件的特定列

file1的數據如下圖所示只包含一列。

112.319 
108.915 
105.512 

file2有像下面這樣的數據,包含八列。

0.000000  0.000  0.000  0.000  0.000   0  0.0001.0000E+20 
0.000000  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 
0.000000  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 

我想與文件1的第一列替換文件2的第一列和輸出將

112.319  0.000  0.000  0.000  0.000   0  0.0001.0000E+20 
108.915  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 
105.512  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 

我試着用其他的第一條記錄,以取代每一行的第一個記錄但沒有成功。我會很感激,如果有人能幫我做的是使用sed。

此致敬意。

回答

1
join -o 1.2,2.3,2.4,2.5,2.6,2.7,2.8 <(cat -n file1) <(cat -n file2) | column -t 

產生

112.319 0.000 0.000 0.000 0.000  0 0.0001.0000E+20 
108.915 0.000 0.000 0.000 20.000000 0 0.0001.0000E+20 
105.512 0.000 0.000 0.000 20.000000 0 0.0001.0000E+20 

更新:由於空白是顯著,你可以使用字符串更換。這裏的AWK:

awk 'NR==FNR {n[FNR]=$1; next} {sub(/[^[:space:]]+/, n[FNR]); print}' f1 f2 

生產

112.319  0.000  0.000  0.000  0.000   0  0.0001.0000E+20 
108.915  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 
105.512  0.000  0.000  0.000 20.000000   0  0.0001.0000E+20 
+0

它的工作原理,但改變格式,就像數字之間的間距非常重要,否則軟件不識別數字。 – 2012-03-27 14:25:09

+0

@hamaskhan,更新 – 2012-03-27 14:46:57

+0

這似乎是完美的。 – 2012-03-27 15:32:01

2

您可以使用paste/tr/cut/column命令:

$ paste file{1,2} | tr -s ' ' | cut -d ' ' -f 1,3- | column -t 
112.319 0.000000 0.000 0.000 0.000  0 0.0001.0000E+20 
108.915 0.000000 0.000 0.000 20.000000 0 0.0001.0000E+20 
105.512 0.000000 0.000 0.000 20.000000 0 0.0001.0000E+20 
+0

它是不工作的。 file1的名稱爲Reibung.txt,file2的名稱爲friction.txt,因此我編寫了粘貼Reibung.txt的摩擦.txt | tr -s''| cut -d''-f 1,3- | column -t> friction1#但沒有任何事情發生。 – 2012-03-27 13:49:41

1

這可能會爲你工作:

cut -d' ' -f2- file2 | paste -d' ' file1 - 

或本(GNU SED):

sed 'R file2' file1 | sed 'N;s/\n\S*//' 

或本:

awk 'FNR==NR{a[NR]=$1;next};{sub($1,a[FNR])}1' file1 file2 

編輯:

這可能會爲你工作:(GNU sed的?)

sed '=;s/.*/s|\\S*|&|/' file1 | sed 'N;s/\n//' | sed -i -f - file2 
+0

您的解決方案接近我正在尋找的解決方案。與sed這工作正常,但問題是它將列添加到文件2,但不替換那裏。我的意思是複製但不能替換。我期待與sed的解決方案,問候 – 2012-03-27 14:39:56

+1

我想你的意思是你想使用'-i'編輯功能。參見編輯。 – potong 2012-03-27 16:50:02

相關問題