あるファイルの特定の値を別のテキストファイルの値に更新する

あるファイルの特定の値を別のテキストファイルの値に更新する

ASCII形式のテキストファイルがありますが、特定の値を別のテキストファイルに保存されている値に置き換えたいと思います。

text_1. . . . 50.asc5列、4行という名前のファイルを考えてみてください。

ファイルのサンプルデータ

 0.40007 0.544 0.6795 0.1545 -3.4028
 0.61488 0.8471 0.7444 0.3537 0.0709
 0.65128 0.6651 0.7948 0.9200 0.893
 0.70952 0.5990 0.5061 0.610 0.893

各ファイルの(列5、行1)をReplacing_values.txt

データがあります。

1
2
3
4
.
.
.
50

期待される結果(すべてのファイルを続行)

 0.40007 0.544 0.6795 0.1545  1
 0.61488 0.8471 0.7444 0.3537 0.0709
 0.65128 0.6651 0.7948 0.9200 0.893
 0.70952 0.5990 0.5061 0.610 0.893

私はこれを試しました

for i in `seq 50`; do x=`awk 'FNR==(1) {print $5}' *.asc`; y=`cat Replacing_values.txt`; echo $x==$y ;done

答え1

柔軟なGNUの使用awk特徴:

gawk -i inplace -v repl="Replacing_values.txt" 'FNR==1{ getline $5 < repl }1' *.asc
  • -i inplace- 入力ファイルの内部変更を許可する
  • -v repl="Replacing_values.txt"- 代替値でファイル名を保持する変数
  • FNR==1- 各入力ファイルの最初の行だけが考慮されます。
  • getline $5 < repl-replファイルから次のレコードを読み取り、5番目の列に割り当てる$5

関連情報