基本的にはゲームサーバー(マインクラフト)なのですが、新しい世界生成を自動化しようとする状況に封着しています。既定では、このコードスニペットを含むファイルが正常に作成されました。
ファイル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)
コメント解除
YAW
とPITCH
行一番下のYaw:とPitch:を次に変更します。
yaw: $YAW pitch: $PITCH
答え2
本当に必要ですか?分配する変数の値は?これらのvariable: value
ペアは入力と出力で同じように見えるため、テキストとしてのみ抽出できます。
$ awk '/mine:/,/allowFlight/ {if ($1 ~ /^[xyz]:/) print;}' file1.txt
z: 256.5
y: 62.0
x: -223.5
コマンド置換を使ってここに直接書くことができると思います。
cat > file2.txt << EOF
world: mine
$(awk '/mine:/,/allowFlight/ {if ($1 ~ /^[xyz]:/) print " "$1,$2;}' file1.txt)
yaw: 0.0
pitch: 0.0
name: mine
EOF
print " "$1,$2
(私は出力を少し美しくするために代わりにsimpleを使用しましたprint
)。