我正在尝试将flatfile数据库filename=iplocationdata
重新分组到各个部分。
这个文件经常更新,包含几千行,所以我想找一个智能解决方案来编写输出脚本。
我得到的是这样的:
NA
10.0.0.0/16
Dallas1
NA
10.1.0.0/16
Houston1
EMEA
10.2.0.0/16
Paris1
EMEA
10.3.0.0/16
London1
APAC
10.4.0.0/16
Hong-Kong1
APAC
10.5.0.0/16
Shanghai1
我需要两个不同的输出。
第一个我解决了这个问题:
awk 'NR%3{printf $0" ";next;}1' iplocationdata
NA, 10.0.0.0/16, Dallas1
NA, 10.1.0.0/16, Houston1
EMEA, 10.2.0.0/16, Paris1
EMEA, 10.3.0.0/16, London1
APAC, 10.4.0.0/16, Hong-Kong1
APAC, 10.5.0.0/16, Shanghai1
第二个列表,我希望看起来像这样:
NA
10.0.0.0/16, Dallas1
10.1.0.0/16, Houston1
EMEA
10.2.0.0/16, Paris1
10.3.0.0/16, London1
APAC
10.4.0.0/16, Hong-Kong1
10.5.0.0/16, Shanghai1
这个我无法解决。如果可能的话,我更喜欢一个班轮,有人有一个很好的解决方案吗?
答案 0 :(得分:4)
编辑:添加了遗失,
$ awk '$1==p{next} NR%3==1{print; p=$1} NR%3==2{printf "%s, ",$0} NR%3==0' s.txt
NA
10.0.0.0/16, Dallas1
10.1.0.0/16, Houston1
EMEA
10.2.0.0/16, Paris1
10.3.0.0/16, London1
APAC
10.4.0.0/16, Hong-Kong1
10.5.0.0/16, Shanghai1
答案 1 :(得分:0)
awk 'NR%3 {
printf $0", "
next
} 7' iplocationdata | tee outfile1 | awk 'BEGIN {
FS=OFS=", "
}
$1 != p {
p=$1
print $1
}
{
print $2,$3
}' > outfile2
第一部分的原始awk脚本(添加了您在输出中显示的逗号。
第二个awk脚本使用第一个脚本的输出作为输入,并保存第一个字段,只要它与先前保存的字段不同,为这些行打印$1
并为每一行打印$2,$3
。
答案 2 :(得分:0)
一些神秘的 If dowVal = 2 ^ (x - 1) Then
mycheckbox.Checked = True
End If
awk
可能更具可读性
$ awk 'NR%6!=4{ORS=(++c%5-3)^2==1?", ":RS; print}' file
NA
10.0.0.0/16, Dallas1
10.1.0.0/16, Houston1
EMEA
10.2.0.0/16, Paris1
10.3.0.0/16, London1
APAC
10.4.0.0/16, Hong-Kong1
10.5.0.0/16, Shanghai1