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

Shell 如何提取列中包含唯一文本的行,shell,posix,hp-ux,Shell,Posix,Hp Ux,我有一个类似于的文本文件 "3"|"0001" "1"|"0003" "1"|"0001" "2"|"0001" "1"|"0002" i、 e.包含带引号字符串的管道分隔文本文件 我需要做的是: 首先,提取包含第一列中每个值的第一行,生成 "3"|"0001" "1"|"0003" "2"|"0001" "1"|"0003" "2"|"0001" "3"|"0001" 然后,按第一列中的值排序,生成 "3"|"0001" "1"|"0003" "2"|"0001" "1"|"0003"

我有一个类似于的文本文件

"3"|"0001"
"1"|"0003"
"1"|"0001"
"2"|"0001"
"1"|"0002"
i、 e.包含带引号字符串的管道分隔文本文件

我需要做的是:

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

"3"|"0001"
"1"|"0003"
"2"|"0001"
"1"|"0003"
"2"|"0001"
"3"|"0001"
然后,按第一列中的值排序,生成

"3"|"0001"
"1"|"0003"
"2"|"0001"
"1"|"0003"
"2"|"0001"
"3"|"0001"
执行排序很简单-
sort-k1,1-t\|
——但我一直在提取文件中的第一行,该行包含第一列中的每个值。我曾想过使用
uniq
,但它不能满足我的要求,而且它的“列处理”功能仅限于忽略空格或制表符分隔文本的前“x”列

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

我这里有点空白。欢迎任何建议。

您可以:

awk -F'|' '!a[$1]++' file|sort...
awk
部件将删除重复的行,只保留第一个引用

我没有HP unix box,因此无法进行真正的测试。但我认为它应该去…

你可以做:

awk -F'|' '!a[$1]++' file|sort...
awk
部件将删除重复的行,只保留第一个引用


我没有HP unix box,因此无法进行真正的测试。但是我认为应该去…

我的
awk
-傅没有能力弄明白这一点。工作起来很有魅力。非常感谢!我的
awk
-fu没有能力解决这个问题。工作起来很有魅力。非常感谢!