![当条件为真 awk 时如何连接下一行](https://linux22.com/image/104011/%E5%BD%93%E6%9D%A1%E4%BB%B6%E4%B8%BA%E7%9C%9F%20awk%20%E6%97%B6%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5%E4%B8%8B%E4%B8%80%E8%A1%8C.png)
我用来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
在 if 语句中使用printf()
有条件地打印带或不带字符的行\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