簡體   English   中英

使用sed或awk對輸出數據進行分組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM