当我运行输入文件时,我得到一个包含 758 行的文件,如下所示。
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS11/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS7/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS9/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO4_ACTIVOS11/MoN-MVW.out::: Total energy:
我需要排序,使其看起来像这样。
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS7/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS9/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS11/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO4_ACTIVOS11/MoN-MVW.out::: Total energy:
换句话说,我需要它按照单词 ACTIVOS 之后的数值进行排序。
答案1
我能够通过以下方式完成此任务:
sed 's/ACTIVOS/\&/g' input | sort -n -t \& -k2 | sed 's/\&/ACTIVOS/g'
- 首先我们替换
ACTIVOS
为单个字符(因为排序只能使用单个字符分隔符)。如果您的文件可能包含该&
字符,但如果您知道输入中肯定不会出现另一个字符,则可以替换该字符,这是有风险的。 - 现在我们根据第二列对输出进行数字排序(新添加的之后的所有内容
&
) - 现在我们将临时
&
背部替换为ACTIVOS
使用示例输入:
$ cat input
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS11/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS7/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS9/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO4_ACTIVOS11/MoN-MVW.out::: Total energy:
$ sed 's/ACTIVOS/\&/g' input | sort -n -t \& -k2 | sed 's/\&/ACTIVOS/g'
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS7/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS9/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS11/MoN-MVW.out::: Total energy:
DISTANCIA1.45_SIMETRIA1_GIRO4_ACTIVOS11/MoN-MVW.out::: Total energy:
根据您的命令,您应该能够执行以下操作:
grep -R ':: RASSCF root number 1 Total energy:' * | sed 's/ACTIVOS/\&/g' | sort -n -t \& -k2 | sed 's/\&/ACTIVOS/g' > outputCASSCF.txt
答案2
当用你的样本进行测试时,这样的东西就足够好了......
cat textfile | sort -V
如果您正在使用 GNU 扩展运行 sort(或者换句话说,如果您正在使用 GNU/Linux 或具有 GNU 扩展的类 Unix 系统)...
让我知道它是否适用于您的所有文本,如果适用,请不要忘记选择它作为正确答案。
祝你好运!
答案3
另一种处理方法是以某种方式界定字段;下面使用下划线来分隔它们,然后告诉sort
从字段 4 中的位置 8 开始对数字进行排序;如果字段 4 中有重复项,则使用字段 3:
sort -t_ -k4.8n -k -k3,3 input
示例输入的输出--debug
如下:
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS7/MoN-MVW.out::: Total energy:
_
_____
________________________________________________________________________
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS9/MoN-MVW.out::: Total energy:
_
_____
________________________________________________________________________
DISTANCIA1.45_SIMETRIA1_GIRO2_ACTIVOS11/MoN-MVW.out::: Total energy:
__
_____
________________________________________________________________________
DISTANCIA1.45_SIMETRIA1_GIRO4_ACTIVOS11/MoN-MVW.out::: Total energy:
__
_____
________________________________________________________________________