从文件中提取文本字符串,将它们分配给变量然后将它们写入另一个文件?

从文件中提取文本字符串,将它们分配给变量然后将它们写入另一个文件?

基本上,它是一个游戏服务器(我的世界),我遇到了一种情况,我正在尝试自动化新世界的生成。基本上,我有一个很高兴生成的文件,其中包含此代码片段。

文件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

如果您希望它也提取偏航和俯仰:

  • 更改 awk 行以从第 181 行提取:

    FILE1=$(awk 'FNR>=181&&FNR<=185' $FILE1)
    
  • 取消注释YAWPITCH

  • 将最底部的偏航:和俯仰:更改为:

    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(我使用而不是简单的稍微美化了输出print)。

相关内容