2013-07-16 73 views
-1

我有兩個文本文件。一個是Fortran程序的輸入文件,另一個是兩列(許多行)有實數。如果我可以用第二個文件的每一行多次替換第一個文件的第三行,那麼我可以自動執行我的任務。我想用文件2的NR = 1替換文件1中的NR = 3,運行輸入。用文件二的NR = 2再次替換文件1中的NR = 3,運行輸入。依此類推。 我想在Windows上使用批處理文件和gawk,grep,sed。 (gawk,grep,sed和其他unix/linux命令通過unxutil在windows上可用)。可能嗎?任何幫助?例如: 第一個文件用第二個文件的每一行多次替換第一個文件的一行

1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 
1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 
17.01425 0.00000 
0.0 0.0 1.000 1.000 2700.0  
0.0 0.0 0.0 0.0 0.0       
100.0 290.0        
1 360.0         
310.0 800.0 2700.0 2700.0     
    2 10 360.0     

第二文件

17.01425 0.00000 
17.37597 10.00000 
17.73771 20.00000 
18.09943 30.00000 
................ 

我想第一(17.01425 0.00000)的3ND線由第二文件(17.73771 20.00000等中的每一行被替換)。

+1

提供輸入文件的樣本和您的預期輸出。 – anubhava

+0

輸入文件1 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 17.01425 0.00000 0.0 0.0 1.000 1.000 2700.0 0.0 0.0 0.0 0.0 0.0 100.0 290.0 1 360.0 310.0 800.0 2700.0 2700.0 2 10 360.0 第二個文件17.01425 0.00000 17.37597 10.00000 17.73771 20.00000 18.09943 30.00000 ................我希望將第一行的第二行(17.01425 0.00000)替換爲第二個文件的每行(17.73771 20.00000)等。 –

+0

請勿在評論中提供數據。請通過編輯您的問題發佈這些樣本。 – anubhava

回答

2

這部分的猜測工作沒有一些期望的輸出,但是這可能是你想要什麼:

awk ' 
NR==FNR { file1[NR]=$0; next } 
{ 
    for (i=1; i<=(NR-FNR); i++) 
     print (i==3 ? $0 : file1[i]) > ("outfile" FNR) 
} 
' file1 file2 
+0

我希望第一個文件的第三行按第二個文件的每一行進行更改。這樣我可以獲得許多與第一個文件等效但不同的第三行文件。確切地說,現在我想改變43次,因爲我的第二個文件有43行。我希望從文件1生成的所有這43個文件都被輸入到一個更大的fortran程序中,我希望使用批處理文件調用43個文件。由於某些限制,我將在Windows平臺上完成所有這些工作。 –

+0

我可以用我有限的知識來實現​​它。它只是工作而不應用任何改變。非常感謝!!! –

1

這裏有一個建議:

while read line 
do 
    sed -i "3c${line}" file1.txt 
    # do whatever you need to with the modified file 
done < file2.txt 

如果需要保留原始file1.txt,改變sed line to:

sed "3c${line}" <file1.txt> tempfile.txt 

並運行您的後續命令對臨時文件,而不是...

+0

您需要設置IFS =並添加-r標誌以進行讀取。您還需要處理file2中的一行爲空,因爲這會導致sed出現語法錯誤,並考慮sed如何處理反斜槓和其他file2字符。 –

+0

@EdMorton鑑於給出的示例輸入,我不相信在這種特殊情況下'IFS ='或'read -r'是必需的,儘管它們在更一般的情況下是絕對有用的。然而,檢查空輸入可能是一個好主意 - 但主要目的是建議框架,但不提供完全調試和完全防彈縮小包裝解決方案... – twalberg

+0

使用IFS =和-r不是東西當你發現需要的時候添加 - 你應該總是設置IFS =並且使用read -r,除非你有一個非常具體的原因不太像,你應該總是引用你的shell變量。問題是,該框架不能很好地工作,因爲它需要處理太多的「特殊」情況 - 你根本無法使這種方法穩健,不像awk解決方案發布,甚至,我認爲,如果你使用awk而不是sed作爲循環內部的命令(但外部循環本身將是多餘的)。 –

相關問題