入力ファイルを実行すると、次のように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
まず、単一の文字に置き換えます(ソートでは、単一の文字区切り文字のみを使用できるため)。ファイルにその文字が含まれていると&
危険ですが、他の文字が入力に確実に表示されないことを知っている場合はそれを置き換えることができます。&
次に、2番目の列(新しく追加された列の後のすべての項目)に基づいて出力を数値で並べ替えます。&
今、一時などを交換します。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拡張機能を使用してソートを実行する場合(つまり、GNU / LinuxまたはGNU拡張機能を含むUnix系システムを使用している場合)...
それがあなたのすべてのテキストに適用されるかどうか教えてください。もしそうなら、正しい答えで選択することを忘れないでください。
頑張ってください!
答え3
これを行うもう一つの方法は、いかなる方法でもフィールドを区別することです。以下は、下線を使用してフィールドを区切ってから、sort
フィールド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:
__
_____
________________________________________________________________________