【发布时间】:2020-12-06 08:00:09
【问题描述】:
我有这样的数据(文件名为list-in.dat)
a ; b ; c ; i
d
e ; f ; a ; b
g ; h ; i
我想要一个这样的列表(输出文件list-out.dat),其中包含所有项目,按字母顺序(不区分大小写)并且每个唯一项目只有一次。
a
b
c
d
e
f
g
h
i
我的尝试是:
awk -F " ; " ' BEGIN { OFS="\n" ; } {for(i=0; i<=NF; i++) print $i} ' file-in.dat | uniq | sort -uf > file-out.dat
但我最终得到了所有的蚂蚁除了那些只有一个项的行:
a
b
c
e
f
g
h
i
无论一行中有多少项目/如果缺少字段分隔符,我如何获取所有(唯一、排序的)项目?
【问题讨论】:
-
所以要按字母顺序输出所有字段?
-
是的,所有唯一字段
-
wrt
for(i=0;- 字段编号(以及数组索引和字符串字符位置)在 awk 中从1开始,而不是0。您的循环将打印$0(整个输入行),然后每个字段$1到$NF。 wrtuniq | sort -u- uniq 需要排序的输入,而 sort -u 做了 uniq 和排序一样的工作,所以uniq | sort -u没有意义。不过,更重要的是,您的脚本中没有任何内容可以从一行中删除一个字段,并且该脚本绝对不会产生您所说的输出。发布您遇到问题的真实脚本,以便我们为您提供帮助。