首页 > 解决方案 > Bash 脚本将多行排序为一个块

问题描述

我有一个脚本,它接受用户的输入(医院名称、医院 ID、FAA ID、LAT/LON、城市、州。所有这些信息都以各种方式处理,以不同格式写入多个文件。然后,每个文件都是排序以使新信息按字母顺序排列。我已经完成了脚本,一切正常;但是,我没有编写代码来对一个特定文件进行排序,因为它的格式是代码中的多行代码。下面是我的摘录脚本和发送此信息的文件的摘录。

if [ -z "$FAA" ]; then
sed -i '' "${line} i\\
    <Placemark>\\
      <name>${HOSP}</name>\\
      <description>${CITY}, ${STATE} ${ID}</description>\\
      <styleUrl>#style1</styleUrl>\\
      <Point>\\
        <coordinates>${LON},${LAT},0</coordinates>\\
      </Point>\\
    </Placemark>\\
" "$dir"/Hospital.kml
else
sed -i '' "${line} i\\
    <Placemark>\\
      <name>${HOSP}</name>\\
      <description>${CITY}, ${STATE} ${ID} ${FAA}</description>\\
      <styleUrl>#style1</styleUrl>\\
      <Point>\\
        <coordinates>${LON},${LAT},0</coordinates>\\
      </Point>\\
    </Placemark>\\
" "$dir"/Hospital.kml
fi

此代码获取输入变量并将它们放在代码中,然后将代码块插入到底部的 KML 文件中,就在最后 2 行代码之前。${line} 之前已计算以查找倒数第二行。

这是它所在的文件的摘录:

    <Placemark>
      <name>A_FAKE_HOSP_NAME</name>
      <description>FAKE CITY, ST FAKEID</description>
      <styleUrl>#style1</styleUrl>
      <Point>
        <coordinates>-83.12345678,33.123456789,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>ANOTHER_HOSP_NAME</name>
      <description>NEW CITY, ST FAKEID2 FAAID1</description>
      <styleUrl>#style1</styleUrl>
      <Point>
        <coordinates>-83.12345678,33.123456789,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <name>FAKE_HOSP</name>
      <description>A CITY, ST FAKEID3</description>
      <styleUrl>#style1</styleUrl>
      <Point>
        <coordinates>-84.12345678,33.123456789,0</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>

我想要完成的是从整个块中取出<Placemark></Placemark>并找到它将插入到具有数千个条目的目标文件中的位置。理想情况下,代码将获取 $HOSP 并按字母顺序在目标文件中找到它所属的位置,然后将整个块插入到<Placemark></Placemark>文件中的位置。

我提前感谢任何和所有的帮助或建议。此脚本在 macOS 上执行。

标签: bashscripting

解决方案


推荐阅读