【问题标题】:Delete the line leading with non-numeric data and insert the text before a specific text format in linux删除以非数字数据开头的行并在linux中特定文本格式之前插入文本
【发布时间】:2015-02-10 12:27:12
【问题描述】:

我有一个包含数千行格式的文件

unwantedtext1 
unwantedtext1
  50779       1   52476   52475   52481   52485
  50780       1   52485   52481   52480   52484
  .....
  .....
  unwantedText2
  50614  1.8837812e+001  7.0057003e+000  1.6900000e+002
  52200  4.6960466e+001 -2.5497744e+000  1.4950614e+002
  .....
  .....
unwantedtext3
unwantedtext3

为了实现我的目标我已经尝试过

sed -n '/^[0-9]\{3\}/p'   input.txt and also   # to remove the line with non numeric in beginning
grep '^[0-9][0-9][0-9]' input.txt  > output.txt

在下一步中,当字段 2 变为实数而不是整数时,我必须在文件开头添加文本 WantText1 和 WantText2。这样输出将是

wantedtext1 
wantedtext1
  50779       1   52476   52475   52481   52485
  50780       1   52485   52481   52480   52484
  .....
  .....
  wantedText2
  50614  1.8837812e+001  7.0057003e+000  1.6900000e+002
  52200  4.6960466e+001 -2.5497744e+000  1.4950614e+002
  .....
  .....
wantedtext3
wantedtext3

这些想要的文本可以直接回显,也可以从其他文本输入。数据是空格分隔的,而不是制表符分隔的。

使用 sed 或 awk 有什么建议吗?

【问题讨论】:

  • 将不需要的替换为想要的有什么问题?
  • 嗨哈马德,是的,你可以用 awk 做到这一点,但它一定会变得非常复杂且容易出错。此外,它不会比使用通用脚本语言(例如 python)解析所有内容快得多。你能解释一下为什么你不能这样做吗?
  • 我已经尝试过,但我没有成功使用上面给出的命令,所以认为解析等语法可能有问题。你能给我一些建议吗?
  • @AvinashRaj 我必须插入想要的文本以适合我的格式要求和不需要的文本被删除,以便我的文件看起来符合软件的要求。

标签: linux awk sed grep


【解决方案1】:

posix 版本(--posixon GNU sed)

sed '#n
1 {x;s/.*/WantedText2/;x
   a\
WantedText1
   }
/^[[:blank:]]*[0-9]\{3,\}/ {
   /^[[:blank:]]*[0-9]\{3,\}[[:blank:]]\{1,\}[-0-9]\{1,\}\./ !p
   /^[[:blank:]]*[0-9]\{3,\}[[:blank:]]\{1,\}[-0-9]\{1,\}\./ H
   }
$ {x;p
   a\
Wanted\
Text\
3
   }' YourFile

在 1 sed 内选择和打印

  • 仅在p 操作上设置打印
  • 在暂存缓冲区中预加载 WantedText2
  • 打印 WantedText1
  • 以数字开头的在线
    • 如果整数(非浮点)作为第二个数字,打印它
    • 如果作为第二个数字浮动,则追加到 hodling 缓冲区
  • 如果到达末尾,加载保持缓冲区并打印它并添加所需的文本 3
  • 循环

【讨论】:

  • 我可以将这个想要的文本分成多行吗?不可能从某个文本文件中传输它吗?你能告诉我怎么做吗?谢谢
  • 我怎样才能添加想要的文本 3,你的代码中也缺少它
  • 多行选择分隔符?应该更改算法,因为 Lione 的 sed 工作行,在这种情况下,需要先将文件加载到缓冲区中,或者使用具有不良行为风险的子选择。对于想要的 text3,我调整了回复代码
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2011-06-11
  • 2012-04-27
  • 2021-12-19
相关资源
最近更新 更多