[英]Grouping output data with sed or awk
我正在嘗試獲取一個filename=iplocationdata
數據庫filename=iplocationdata
進行重新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
這是我無法解決的。 如果可能的話,我更喜歡一個襯板,有人對此有很好的解決方案嗎?
編輯 :添加了丟失,
$ 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
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
。
一些神秘的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
也許更具可讀性
$ awk '{c=NR%6} c!=4{ORS=c==2||c==5?", ":RS; print}' file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.