2017-11-13 19 views
0

浮動小数点数の多い2つのファイルがあります。私はファイル2の浮動小数点数でファイル1の浮動小数点数を置き換え、行数と文字数を使って数字を見つけ、数値を探したい。ファイルの一部を別のファイルの一部で置き換えます。

件名に関するトピックはたくさんありますが、値をコピーするために2番目のファイルを使用するものは見つかりませんでした。

はFile1:

14 4 
2.64895E-01 4.75834E+02 2.85629E+05 -9.65829E+01 
2.76893E-01 8.53749E+02 4.56385E+05 -7.65658E+01 
6.25576E-01 5.27841E+02 5.72960E+05 -7.46175E+01 
8.56285E-01 4.67285E+02 5.75962E+05 -5.17586E+01 

File2の:

はここに私の二つのファイルの例です。この特定の例では

Some text on the first line 
1 
Some text on the third line 
0 
AND01 0.53758275 0.65728944 
AND02 0.64889566 0.53386002 
AND03 0.65729386 0.64628194 
AND04 0.26586960 0.46582925 
AND05 0.46480534 0.57415869 

、私が最初に交換したいと思いますliに書かれた2番目の浮動小数点によるFile1の2行目(2.64895E-01)の番号File2のうちの5番目(0.65728944)。

注:数字の値は、私が考慮するファイルに応じて変わるので、ファイル内の位置によって数字を識別する必要があります。

私はbashスクリプトを使用するのが非常に新しく、今まで "sed"コマンドを使ってファイルを変更しています。

助けを歓迎します:) あなたの入力に感謝します!

+0

私はあなたがbashの卒業から読み、適切なフィールドを書くために、実際の言語を使用する必要がかもしれないと思う – Pandelis

+0

あなたが置き換え番号の位置を特定しない方法と、置換? – karakfa

答えて

0

それはbashでそれを行うには難しいことではありませんが、それは厳格な要件ではない場合、より簡単に、より簡潔なソリューションがawkのような実際のテキスト処理ツールで可能です:

awk 'NR==5 {val=$2} NR>FNR {FNR==2 && $1=val; print}' file2 file1 

説明:file2を読みます最初に、変数val(最初の部分:NR==5 {val=$2})に5番目のレコードの2番目のフィールドを格納します。次に、すべての行を印刷しますが、valに格納されている値を使用して、2番目のレコードの最初のフィールドを置き換えます(FNRは現在のファイルレコード番号、NRはこれまでの全ファイルのレコードの総数です)。

一般に、awkプログラムはpattern { actions }のシーケンスで構成されています。 patternは、一連のactionsが実行される条件です。 .. $NFはフィールド値を持つ変数で、各行(レコード)はフィールド区切り文字(FS変数、または-F'..'オプション)のフィールドに分割されます。デフォルトはスペースです。

結果(出力):

14 4 
0.53758275 4.75834E+02 2.85629E+05 -9.65829E+01 
2.76893E-01 8.53749E+02 4.56385E+05 -7.65658E+01 
6.25576E-01 5.27841E+02 5.72960E+05 -7.46175E+01 
8.56285E-01 4.67285E+02 5.75962E+05 -5.17586E+01 
+1

randomirありがとう、これは完全に動作します。非常に便利なテキスト処理ツールは、それを覚えています。あなたの助けをもう一度ありがとう! – ms518

関連する問題