포함된 콜론 수에 따라 열의 값을 수정합니다.

포함된 콜론 수에 따라 열의 값을 수정합니다.

포함된 콜론 수에 따라 두 번째 열의 내용을 조작하겠습니다. 두 번째 필드에 여러 개의 콜론이 포함되어 있으면 첫 번째 콜론 앞에 오는 값이 필요하고, 그렇지 않으면 전체 값이 필요합니다.

#Input    
1 1131:11854476:4:1$ 0 114476 1 4
5 367504:11862778:4:2$ 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575:38680372:1$ 0 38372 1 2

# Output
1 1131 0 114476 1 4
5 367504 0 118628 2 4
3 3:64357_3_2$ 0 18267 2 3 
4 7575 0 386372 1 2

전체 파일을 조작하거나 처리한 후 개별 열을 복사하는 방법에 대한 다양한 제안을 접했습니다.하지만 처리되지 않은 나머지 열은 유지해야 합니다. 단일 명령( awk/ one-liners) 또는 여러 명령 cut으로 이를 달성하는 방법에 대한 아이디어를 제공할 수 있습니까 ?

답변1

split두 번째 필드를 켤 수 :있으며, 2개 이상의 필드(즉, 배열의 요소 수 z)가 있는 경우 첫 번째 필드만 유지하세요.

awk '{n=split($2, z, ":");if (n > 2) $2=z[1]};1' infile

사용하고 싶다면 sub다음과 같이 할 수 있습니다.

awk '{sub(/:.*:.*/,"",$2)};1' infile

즉, 콜론 두 개(또는 그 이상)를 바꿔보세요.

관련 정보