gpt4 book ai didi

linux - 用于在具有索引的文件中查找唯一值的 bash 脚本

转载 作者:太空狗 更新时间:2023-10-29 11:39:42 25 4
gpt4 key购买 nike

我有一个文本文件,test.txt,比如

shekhar cbv
ravi cbv
ravi sdf
asd df
ravi Df
ravi dfg
ravi df
ravi dfg
ravi df
afas cvb
sdf hgh
sasdg cfg

我想根据第二个字段进行排序,并且只想在“result.txt”上写入第二个字段 目前我正在做以下事情:

排序-k 2,2 测试.txt| uniq -i -f 1 | cut -d ' ' -f2 > 结果.txt

正在写入 2n 个字段即

cbv 
cfg
cvb
df
dfg
hgh
sdf

对应于每个唯一的第二个字段值,我希望它的所有索引在原始文件中。这怎么可能?

期望的输出:

cbv 1 2
cfg 12
cvb 10
df 4 5 7 9
dfg 6 8
hgh 11
sdf 3

如果说还有第三个字段,还有一件事。如何实现上述仅意味着在排序和查找唯一性时仅使用第二个字段。

输入第三个字段

    shekhar cbv rg
ravi cbv fdf
ravi sdf dfh
asd df dfhdfh
ravi Df fgh
ravi dfg dfh
ravi df dfgh
ravi dfg dfgh
ravi df dfhg
afas cvb fhfg
sdf hgh cgfhfg
sasdg cfg fgh

所需的 o/p 相同。谢谢,拉维

最佳答案

尝试使用此命令打印包含所有原始索引的列:

awk '{k=tolower($2); arr[k]=arr[k] " " NR} END{for(v in arr) print v, arr[v]}' test.txt | sort -f -k 1,1

输出

cbv  1 2
cfg 12
cvb 10
df 4 5 7 9
dfg 6 8
hgh 11
sdf 3

更新:仅使用 awk 解决方案

awk '{k=tolower($2); arr[k]=arr[k] " " NR} END{n=asorti(arr, dest); for(i = 1; i <= n; i++) print dest[i], arr[dest[i]]}' test.txt

您的文件可以有任意数量的列,但此命令只会查看第 2 列。

关于linux - 用于在具有索引的文件中查找唯一值的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6207840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com