私は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