ファイルからテキスト文字列を抽出して変数に代入し、別のファイルに書きますか?

ファイルからテキスト文字列を抽出して変数に代入し、別のファイルに書きますか?

基本的にはゲームサーバー(マインクラフト)なのですが、新しい世界生成を自動化しようとする状況に封着しています。既定では、このコードスニペットを含むファイルが正常に作成されました。

ファイル1.txt

keepSpawnInMemory: 'true'
spawnLocation:
  ==: MVSpawnLocation
  yaw: 0.0
  pitch: 0.0
  z: 256.5
  y: 62.0
  x: -223.5
autoLoad: 'true'
bedRespawn: 'true'

これはうまくいきますが、z:256.5、y:62.0、x:-223.5を別々に抽出し、次の行を使用してfile2.txtというファイルを作成する必要があります。

 world: mine
 x: -223.5
 y: 62.0
 z: 256.5
 yaw: 0.0
 pitch: 0.0
 name: mine

awkのようなものを使って最初の数字を抽出し、変数に割り当ててからファイルに書き込むとします。私はawkを一度も使ったことがないのでとても混乱しています。助けてくださった方々に感謝します。私はUbuntu Linux、bashスクリプトを使用します。 awkとbashを使ってこのようなテキストを抽出して変数に変換できますか?

編集する:

ファイル1にx、y、zの複数のインスタンスがあることに言及するのを忘れました。ここからアクセスできます。http://pastebin.com/TqaLcWzV

特定の行から始める方法はありますか?たとえば、z、y、xは常にそれぞれ183、184、185行にあります。

ベストアンサー1

次のスクリプトを試してください。

#!/bin/bash

FILE1=/path/to/file1
FILE2=/path/to/file2

#extracting lines 183 to 185
FILE1=$(awk 'FNR>=183&&FNR<=185' $FILE1)

#extracting variables    
Z=$(echo "$FILE1" | grep z: | awk '{print $2}')
Y=$(echo "$FILE1" | grep y: | awk '{print $2}')
X=$(echo "$FILE1" | grep x: | awk '{print $2}')
#YAW=$(echo "$FILE1" | grep yaw: | awk '{print $2}')
#PITCH=$(echo "$FILE1" | grep pitch: | awk '{print $2}')

cat <<EOF > $FILE2
 world: mine
 x: $X
 y: $Y
 z: $Z
 yaw: 0.0
 pitch: 0.0
 name: mine
EOF

ヨーとピッチも抽出するには、次のようにします。

  • 181行目から抽出するようにawk行を変更します。

    FILE1=$(awk 'FNR>=181&&FNR<=185' $FILE1)
    
  • コメント解除YAWPITCH

  • 一番下のYaw:とPitch:を次に変更します。

    yaw: $YAW
    pitch: $PITCH
    

おすすめ記事