입력 파일을 실행하면 아래와 같이 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 확장을 사용하여 정렬을 실행하는 경우(즉, 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:
__
_____
________________________________________________________________________