특정 열이 동일한 문자열을 갖도록 열 순서를 재정렬합니다.

특정 열이 동일한 문자열을 갖도록 열 순서를 재정렬합니다.

열 2에 Piebald라는 문자열이 포함되기를 원합니다. 다른 문자열의 순서는 중요하지 않습니다. 나는 가지고있다:

HR0024  Black pastel    Piebald
HR0028  Piebald
MC0023  Piebald
MC0039  Fire    Piebald
MC0075  Piebald VPI Axanthic
MC0082  Pastel  Piebald
MC0120  Piebald Yellowbelly     Het-Lavender
MC0124  Super-Pastel    Piebald Het-Clown
MC0126  Fire    Pastel  Piebald
MC0144  Piebald Vanilla

나는 다음과 같은 것을 원합니다 :

HR0024 Piebald pastel Black
HR0028 Piebald
MC0023 Piebald
MC0039 Piebald Fire
MC0075 Piebald VPI Axanthic
MC0082 Piebald Pastel
MC0120 Piebald Yellowbelly Het-Lavender
MC0124 Piebald Super-Pastel Het-Clown
MC0126 Piebald Pastel Fire
MC0144 Piebald Vanilla

일부 행에는 다른 열(2, 3 또는 4)에 대상 문자열이 있습니다. 나는 cut -f이것이 여기서 작동하지 않는다고 생각합니다. 나는 그것이 필요 awk하지 않다고 생각합니다. sed도움을 주시면 감사하겠습니다.

답변1

awk를 사용하여 필드를 반복하고 선택한 필드가 발견되면 두 번째 필드로 바꿉니다.

awk -v p="Piebald" '{
    for (i=2;i<=NF;i++) if ($i == p) {$i = $2; $2 = p; break}
}1' file
  • 1마지막 의미는 print선입니다.
  • break교체 후 루프를 일찍 종료합니다.
  • -v var="value"변수를 에 전달하는 표준 방법입니다 awk.
  • 또한 이 방법을 사용하면 입력의 연속 공백이 기본 출력 필드 구분 기호인 단일 공백으로 줄어듭니다.

산출:

HR0024 Piebald pastel Black
HR0028 Piebald
MC0023 Piebald
MC0039 Piebald Fire
MC0075 Piebald VPI Axanthic
MC0082 Piebald Pastel
MC0120 Piebald Yellowbelly Het. lavender

답변2

다른 문자열의 순서가 중요하지 않으면 다음과 같이 할 수 있습니다.

$ sed -E 's/Piebald//g; s/^(\S+)/\1 Piebald/' file 
HR0024 Piebald  Black pastel    
HR0028 Piebald  
MC0023 Piebald  
MC0039 Piebald  Fire    
MC0075 Piebald   VPI Axanthic
MC0082 Piebald  Pastel  
MC0120 Piebald   Yellowbelly     Het-Lavender
MC0124 Piebald  Super-Pastel     Het-Clown
MC0126 Piebald  Fire    Pastel  
MC0144 Piebald   Vanilla

또는 sed지원하지 않는 경우:

$ perl -pe 's/Piebald//g; s/^(\S+)/\1 Piebald/' file 
HR0024 Piebald  Black pastel    
HR0028 Piebald  
MC0023 Piebald  
MC0039 Piebald  Fire    
MC0075 Piebald   VPI Axanthic
MC0082 Piebald  Pastel  
MC0120 Piebald   Yellowbelly     Het-Lavender
MC0124 Piebald  Super-Pastel     Het-Clown
MC0126 Piebald  Fire    Pastel  
MC0144 Piebald   Vanilla

관련 정보