열 정보를 기준으로 파일을 정렬하고 싶습니다.

열 정보를 기준으로 파일을 정렬하고 싶습니다.

입력 파일을 실행하면 아래와 같이 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'
  1. ACTIVOS먼저 단일 문자로 바꿉니다 (정렬에서는 단일 문자 구분 기호만 사용할 수 있으므로). 파일에 해당 문자가 포함되어 있으면 &위험 하지만 다른 문자가 입력에 확실히 나타나지 않을 것이라는 점을 알고 있으면 이를 바꿀 수 있습니다.
  2. &이제 두 번째 열(새로 추가된 열 이후의 모든 항목 ) 을 기준으로 출력을 숫자로 정렬합니다.
  3. &이제 임시 등을 교체 하겠습니다 .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:
                                     __
                        _____
________________________________________________________________________

관련 정보