我有一组数据。我想按" Name ="排序。行并在每个" Name ="下面有正确的数据集。这可能吗 ?我查看了排序参考,但没有找到任何有关此物流的信息。我得到的数据量低于每个" Name ="可以是完全不同的。
我试图用man sort来找到解决这个问题的工具,但我似乎找不到这样的东西。先感谢您。我可能正在使用不正确的工具或命令。
我目前的数据集。我有数千行具有类似数据。
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Bob13
Cow Up Count 5 Active 1
欲望结果
Name=Bob13
Cow Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1
我的服务器上发生了什么
(admin)$ cat file
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Bob13
Cow Up Count 5 Active 1
[admins01:/script/users/admin]
(admin)$ gawk -v RS='Name=' '
NR>1 {record[$1]=$0}
END {
PROCINFO["sorted_in"]="@ind_str_asc"
for (key in record) printf "%s%s", RS, record[key]
}
' file
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Bob13
Cow Up Count 5 Active 1
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
答案 0 :(得分:1)
我打赌你的gawk版本是“老”。试试这个perl:
perl -0777 -ne 'print join "", sort split /^(?=Name=)/m' file
GNU awk:使用“Name =”作为记录分隔符,并按记录的第一个单词排序。
gawk -v RS='Name=' '
NR>1 {record[$1]=$0}
END {
PROCINFO["sorted_in"]="@ind_str_asc"
for (key in record) printf "%s%s", RS, record[key]
}
' file
请注意,这将使用词典排序,因此“Bob10”将在“Bob1”和“Bob2”之间排序
测试:
$ cat file
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Bob13
Cow Up Count 5 Active 1
$ gawk -v RS='Name=' '
NR>1 {record[$1]=$0}
END {
PROCINFO["sorted_in"]="@ind_str_asc"
for (key in record) printf "%s%s", RS, record[key]
}
' file
Name=Bob13
Cow Up Count 5 Active 1
Name=Bob14
Bird Up Count 10 Active 5
Dog Up Count 2 Active 3
Trex Up Count 5 Active 1
Name=Sally12
Cow Up Count 5 Active 1
Trex Up Count 5 Active 2
Name=Sally15
Kitty Up Count 10 Active 1
Trex Up Count 5 Active 1