【问题标题】:Regular expression for numeric order of the array数组数字顺序的正则表达式
【发布时间】:2021-10-24 06:45:37
【问题描述】:

我想更改许多模拟输入文件的参数文件的顺序。由于材料数据文件很多,(>100 个材料@>200 行)所以我需要自动化。

例如,

....
mobility = [1470.0 530.0],
eps0     = [3.0     -1.0],
....

....
mobility = [530.0 1470.0],
eps0     = [-1.0     3.0],
....

在这种情况下,最好使用简单的脚本形式。

【问题讨论】:

  • 我认为这不能用正则表达式来完成。他们不能进行数字比较。我建议你使用awk 脚本。
  • 我假设您正在尝试重新排序参数,以便它们按数字顺序排列,而不仅仅是交换每行的两个数字。
  • 如果您只想交换两个数字,请使用捕获组和反向引用。请展示你的尝试。
  • 如何编写 swap awk 脚本?
  • 将这两个数字放入变量中。然后比较它们,以便您可以按数字顺序编写它们。

标签: regex linux sed


【解决方案1】:

也许这就是你要找的东西:

cat tst.awk 
match($0, /\[[^]]+\]/) {
  str = substr($0, RSTART+1, RLENGTH-2)
  split(str, a)
  $0 = ( a[1] <= a[2] ? $1 OFS $2 " ["str"]," : $1 OFS $2 " ["a[2] OFS a[1]"]," )
  printf("%-8s %-1s %-6s %8s\n", $1, $2, $3, $4)
}
$ awk -f tst.awk input 
mobility = [530.0 1470.0],
eps0     = [-1.0     3.0],

如需进一步阅读,请查看The GNU Awk User’s Guide

【讨论】:

    猜你喜欢
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多