输入:
Daniel: some_text
Jack: some_text1
Mark: some_text2
Daniel: some_text3
Jack: some_text4
输出:
Daniel: some_text3
Jack: some_text4
Mark: some_text2
Daniel: some_text
Jack: some_text1
马赫需要是“:”之前的第一个字符串
答案 0 :(得分:0)
实现@Barmar注释但没有awk使用文件来保存值数组
#!/bin/bash
lines=`cat $1 | tr -d " "`
for line in $lines; do
key=$(echo $line | cut -d : -f 1)
value=$(echo $line | cut -d : -f 2)
echo "$key: $value" >> "$key.tmp";
done
echo -n "" > output.txt
for line in $lines; do
key=$(echo $line | cut -d : -f 1)
tail -n 1 $key.tmp >> output.txt
head -n -1 $key.tmp > temp.tmp
mv temp.tmp $key.tmp
done
rm *.tmp
我使用tail和head来模拟堆栈的pop函数。性能不是很好,但它确实有效,因为我不用bash编码
运行bash脚本,将文件名作为输入
的参数传递答案 1 :(得分:0)
这是另一种选择
$ cat -n file > filen; paste <(sort -k2,2 filen) <(sort -k2,2 -k1,1nr filen) |
awk '{print $1,$2,$NF}' |
sort -n |
cut -d' ' -f2-
Daniel: some_text3
Jack: some_text4
Mark: some_text2
Daniel: some_text
Jack: some_text1