![특정 열이 동일한 문자열을 갖도록 열 순서를 재정렬합니다.](https://linux55.com/image/182577/%ED%8A%B9%EC%A0%95%20%EC%97%B4%EC%9D%B4%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EA%B0%96%EB%8F%84%EB%A1%9D%20%EC%97%B4%20%EC%88%9C%EC%84%9C%EB%A5%BC%20%EC%9E%AC%EC%A0%95%EB%A0%AC%ED%95%A9%EB%8B%88%EB%8B%A4..png)
열 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