文件处理排序并删除重复

时间:2017-06-28 02:43:15

标签: linux shell

我是Linux环境的新手。我有以下格式列出的金门生成文件,使用BELL字符^G作为分隔符。

I^G2017-06-27 21:57:57.000000^G2^Gtest@gmail.com
I^G2017-06-27 22:00:04.000000^G2^Gtest@gmail.com
I^G2017-06-27 22:00:59.000000^G2^Gtest@gmail.com
K^G2017-06-27 23:00:09.000000^G2^Gtest123@gmail.com

前两列用于内部表示以帮助排序,第三列是唯一键。这是基于第二列(时间戳)和第三列...我想对记录进行排序,并将最新的唯一记录写入其他文件,如下所示。

2^Gtest123@gmail.com

你能帮我解决这个问题。感谢

1 个答案:

答案 0 :(得分:0)

使用sortcuttail来完成此任务:

sort -u -k2,2 -t^G input.txt | cut -d^G -f3,4 | tail -n1 > /tmp/output.txt

首先,我们告诉sort select only only rows(-u),对第二列(-k2,2)进行排序,以使用bell字符作为分隔符(-t^G,类型ctrl+V ctrl+G键入字符),并将其输入文件。然后,我们使用相同的分隔符(cut)将outout传递给-d^G,并仅保留第3和第4列(-f3,4)。然后我们将它传递给tail -n1,只输出最后一行,最后将其重定向到输出文件。

请注意,如果您将^G打印到stdout,它就不会显示任何内容,而是让您的计算机发出哔声。