如何连接多个文本或xml文件但省略每个文件中的特定行?

时间:2018-01-16 23:09:04

标签: python xml linux bash

我希望连接多个xml文件(在这种情况下可以视为文本文件)。通常我认为我可以从Linux命令提示符或bash脚本执行类似的操作:

cat somefile.xml someotherfile.xml adifferentfile.xml > out.txt

除了在这种情况下,我需要复制整个第一个文件除了最后一行,但是在所有后续文件中都省略了前四行和最后一行(技术上,我确实需要最后一行)从最后一个文件开始,但它总是一样的,所以我可以用一个单独的语句轻松添加它。)

在所有这些文件中,前四行和最后一行始终相同,但两者之间的内容各不相同。 xml文件的名称可以硬编码到脚本中,也可以从单独的数据文件中读取,并且它们的数量可能会不时变化,但总是会在10-12左右。但

我想知道最简单,最容易理解的方法是什么。我想我更喜欢bash脚本或python脚本,尽管我通常更了解bash脚本。我无法理解的是如何修剪前四行(除了第一个文件之外的所有行)和每个文件的最后一行。我怀疑是否有一些Linux命令可以做到这一点,但我不知道它会是什么。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

sed '$d' firstfile > out.txt
sed --separate '1,4d; $d' file2 file3 file4 >> out.txt
sed '1,4d' lastfile >> out.txt

使用--separate(或更短的-s)选项非常重要,以便范围语句1,4$可以单独应用于每个文件。

来自GNU sed manual

  

-s--separate

     

默认情况下,sed会将命令行中指定的文件视为单个连续长流。这个GNU sed   扩展允许用户将它们视为单独的文件。

答案 1 :(得分:0)

分两步完成:

  1. 使用head命令(获取你想要的行)
  2. 使用cat结合
  3. 你可以使用临时文件或bash技巧。