根据一行对多行进行排序

问题描述 投票:0回答:1

我有一个包含以下几行的文件:

Name: Karl
Born: 2003-07-06 17:21:36.964
State: Germany
Hobby: Videogames

Name: Albert
Born: 2003-07-05 18:16:19.369
State: UK
Hobby: Soccer

Name: Mark
Born: 2003-06-15 16:58:21.201
State: Italy
Hobby: Jogging

我需要一个 shell 脚本,根据 Born 字段对空白行之间的行进行从旧到新的排序。根据给出的示例,正确的文件结果应该是:

Name: Mark
Born: 2003-06-15 16:58:21.201
State: Italy
Hobby: Jogging

Name: Albert
Born: 2003-07-05 18:16:19.369
State: UK
Hobby: Soccer

Name: Karl
Born: 2003-07-06 17:21:36.964
State: Germany
Hobby: Videogames

我无法做这样的事情,请不要使用 Perl 或 Python...我需要 bash。 提前寻求您的帮助。 问候, 戴夫

bash shell sorting line recursive-query
1个回答
0
投票

你试图完成免费编码,这违反了规则。而且 Unix shell 并不是特别擅长这种事情,如果有任何方法可以获取不同格式的数据,比如 json(有很好的工具可用),你应该这样做。但我会给你一个免费的建议,告诉你什么可能有效:

while read NAME
do
read BORN
read STATE
read HOBBY
read
echo "$NAME@$BORN@$STATE@$HOBBY" 
done < mydata.txt | sort -t@ -k2,2 | (
IFS=@
while read NAME BORN STATE HOBBY
do
echo $NAME
echo $BORN
echo $STATE
echo $HOBBY
echo
done
)

我还没有测试过,但它给了你一个想法。

© www.soinside.com 2019 - 2024. All rights reserved.