如何提取列中包含唯一文本的行

时间:2016-03-22 16:05:48

标签: shell posix hp-ux

我有一个类似于

的文本文件
"3"|"0001"
"1"|"0003"
"1"|"0001"
"2"|"0001"
"1"|"0002"

即。包含带引号的字符串的以竖线分隔的文本文件。

我需要做的是:

首先,提取包含第一列中每个值的第一行,生成

"3"|"0001"
"1"|"0003"
"2"|"0001"

然后,按第一列中的值排序,生成

"1"|"0003"
"2"|"0001"
"3"|"0001"

执行排序很容易 - sort -k 1,1 -t \| - 但我一直在提取文件中包含第一列中每个值的第一行。我想过使用uniq但它没有按照我的意愿行事,它的“列处理”能力仅限于忽略空格或制表符分隔文本的第一个“x”列。

在HP-UX下使用Posix shell(/ usr / bin / sh)。

我在这里画一个空白。欢迎任何建议。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

awk -F'|' '!a[$1]++' file|sort...

awk部分将删除重复的行,仅保留第一次出现的行。

我没有HP-unix盒子,因此我无法进行真正的测试。但我认为它应该......