我有一个列表如下:
1 2 5 2
1 5 5 3
1 5 5 5
5 2 2 2
2 2 4 3
Run Code Online (Sandbox Code Playgroud)
我想对每一行进行排序并获得如下唯一值,类似于sort | uniq
:
1 2 5
1 3 5
1 5
2 5
2 3 4
Run Code Online (Sandbox Code Playgroud)
我一直在网上寻找解决方案,但我只能找到按列排序的解决方案。我怎样才能得到输出?提前致谢。
由于分选的行比连续排序的列更容易,一种方法可以是转置的每一行(使得每个字段变为线),应用sort
和uniq
然后traspose回来。
这是一个简单的实现,假设使用 GNU 工具:
$ while read -r line; do echo "$line" | grep -o '[^ ]*' | sort -h | uniq | paste -s; done <file
Run Code Online (Sandbox Code Playgroud)
它循环遍历file
和,对于每一行:
grep
使用-o
选项(仅打印每行的匹配部分)将其输入分成n行,每个匹配的子字符串一行。在这里,我们匹配除空格之外的所有内容。-h
选项排序,该选项比较人类可读的数字(如果要将字段排序为字母数字字符串,请删除-h
)。uniq
命令删除重复项。paste -s
将标准输入中的每一行打印为由制表符分隔的单行字段。您可以附加一个 final| tr '\t' ' '
将制表符更改为空格。但是请注意,使用循环处理文本通常被认为是不好的做法。
归档时间: |
|
查看次数: |
1228 次 |
最近记录: |