gpt4 book ai didi

linux - 将 2 个文件合并并重新格式化为一个新文件

转载 作者:太空宇宙 更新时间:2023-11-04 11:48:57 27 4
gpt4 key购买 nike

我正在收集命令的一些输出,并希望将 2 个输出文件合并到一个新文件中。

输出样本

output1.txt
OBJECTNAME(TEST.OBJ.1) TYPE(LOCAL)
MESSAGE(20)
OBJECTNAME(TEST.OBJ.2) TYPE(LOCAL)
MESSAGE(30)
...

output2.txt
OBJECTNAME(TEST.OBJ.1) TYPE(MESSAGE)
TIME(16.00.00) DATE(2018-01-11)
OBJECTNAME(TEST.OBJ.2) TYPE(MESSAGE)
TIME(23.44.56) DATE(2019-06-11)
...

我的代码是

MESSAGE=$(echo "DIS MESSAGE(*) MESSAGE")
MESSAGEINFO=$(echo "DIS MESSAGEINFO(*) TIME DATE")
echo "$MESSAGE" >> output1.txt
echo "$MESSAGEINFO" >> output2.txt

我该怎么做才能像这样输出 output3.txt:

OBJECTNAME(TEST.OBJ.1) TYPE(LOCAL)
MESSAGE(20)
TIME(16.00.00) DATE(2018-01-11)
OBJECTNAME(TEST.OBJ.2) TYPE(LOCAL)
MESSAGE(30)
TIME(23.44.56) DATE(2019-06-11)

最佳答案

如果您不介意完全丢失“TYPE(MESSAGE)”和“TYPE(MESSAGE)”,这可能是一个起点:

 diff -u2  <(sed 's/TYPE(LOCAL)//' output1.txt)  <(sed 's/TYPE(MESSAGE)//' output2.txt) | tr -d '+-' | sed -r '/^\s*$/d'
  • <(sed ...) 从文件中删除 TYPE(...) 以提供同步点
  • diff 显示文件之间的差异(使用 OBJECTNAME(TEST.OBJ.XY) 来同步这会输出一些带有 +/- 的东西来表示差异
  • tr 从文件中删除所有 + 和 - 字符。 (如果你故意把它们放在某个地方,带有 's/^+//' 和 's/^-//' 的 sed 会更好,但我不太擅长 sed)
  • las sed 删除空行

带有上层输入文件的输出:

 OBJECTNAME(TEST.OBJ.1)
MESSAGE(20)
TIME(16.00.00) DATE(20180111)
OBJECTNAME(TEST.OBJ.2)
MESSAGE(30)
TIME(23.44.56) DATE(20190611)

进一步清理可能会删除以 sed 's/^//' 开头的空间,但我不想堆叠另一个管道。当然可能有更好看的方式,但这可能已经足够好了。如果您愿意,您甚至可以在合并后重新添加 TYPE(LOCAL)。

备注:这仅在文件内容的结构/顺序与您的示例一样浅的情况下才有效...

关于linux - 将 2 个文件合并并重新格式化为一个新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56682755/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com