조건이 참일 때 다음 줄을 연결하는 방법 awk

조건이 참일 때 다음 줄을 연결하는 방법 awk

나는 awk다음과 같은 텍스트 파일을 편집하는 데 사용합니다.

Device_ID Local Intrfce
CS_Quimicas_Alim Gig 3/13
computacion_seg_23
Gig 3/14 158 T S
MAUSALUD_B Gig 1/40
MULTIAULAS_PRINCIPAL
Gig 3/22 173 S I
S24-Computacion.cs.buap.mx
Gig 3/20 179 S I
N7K-LAN(JAF1651ANDL)
Gig 1/40 179 R S
N7K-LAN(JAF1651ANDL)
Gig 1/46 179 R S
Electronica_76 Gig 3/24
AGROECOLOGIA Gig 3/10
N7K-NK7-SERVERS(JAF1651ANDL)
Gig 1/35 159 R S
SIU_108 Gig 1/17
Bib-Salud Gig 1/40

차트여야 하는데 Device_ID가 너무 길면 나머지 필드가 다음 줄로 넘어가서 다음과 같이 파일을 편집하고 싶습니다.

Device_ID Local Intrfce
CS_Quimicas_Alim Gig 3/13
computacion_seg_23 Gig 3/14 158 T S
MAUSALUD_B Gig 1/40
MULTIAULAS_PRINCIPAL Gig 3/22 173 S I
S24-Computacion.cs.buap.mx Gig 3/20 179 S I
N7K-LAN(JAF1651ANDL) Gig 1/40 179 R S
N7K-LAN(JAF1651ANDL) Gig 1/46 179 R S
Electronica_76 Gig 3/24
AGROECOLOGIA Gig 3/10
N7K-NK7-SERVERS(JAF1651ANDL) Gig 1/35 159 R S
SIU_108 Gig 1/17
Bib-Salud Gig 1/40

첫 번째 필드의 길이를 확인하기 위해 if 조건을 사용하고 있으므로 15자를 초과하면 터미널에 인쇄됩니다.

BEGIN {FS=" "; Dispositivos_largos=0}
    {if (length($1) > 16 )
    {print $1}
    }
END {print "Dispositivos con mas de 16 caracteres en el nombre: "Dispositivos_largos}

하지만 줄 끝에서 다음 줄을 병합할 수는 없습니다.

도움이 필요하세요?

미리 감사드립니다.

답변1

첫 번째 단어의 길이를 사용하십시오.

awk '{printf "%s%s", $0, (length($1) > 16) ? OFS : ORS}' file

또는

awk '{
    line = $0
    if (length($1) > 16) {
        getline
        line = line OFS $0
    } 
    print line
}' file

답변2

문자 (개행) printf()가 있거나 없는 라인을 조건부로 인쇄 하려면 if 문에서 사용하세요.\n

$ awk '{if(length($1)>15 && $0 !~/Gig/){printf "%s ",$0}else{print $0}}' input.txt                                       
Device_ID Local Intrfce
CS_Quimicas_Alim Gig 3/13
computacion_seg_23 Gig 3/14 158 T S
MAUSALUD_B Gig 1/40
MULTIAULAS_PRINCIPAL Gig 3/22 173 S I
S24-Computacion.cs.buap.mx Gig 3/20 179 S I
N7K-LAN(JAF1651ANDL) Gig 1/40 179 R S
N7K-LAN(JAF1651ANDL) Gig 1/46 179 R S
Electronica_76 Gig 3/24
AGROECOLOGIA Gig 3/10
N7K-NK7-SERVERS(JAF1651ANDL) Gig 1/35 159 R S
SIU_108 Gig 1/17
Bib-Salud Gig 1/40

관련 정보