Shell 用于在大文件的每行中提取唯一值的脚本
我有一个很大的csv文件,类似于:Shell 用于在大文件的每行中提取唯一值的脚本,shell,unix,awk,Shell,Unix,Awk,我有一个很大的csv文件,类似于: 222,333,222,333,444 777,333,222,555,777 ... 我需要将每行中的重复项删除: 222,333,444 777,333,222,555 我写这段脚本的目的是: for line in `cat a.txt`; do echo $line | tr ',' '\n' | sort | uniq | tr '\n' ',' ; echo ; done 这是可行的,但我认为有一个更简单的方法 有没有一种方法可以使用命令行
222,333,222,333,444
777,333,222,555,777
...
我需要将每行中的重复项删除:
222,333,444
777,333,222,555
我写这段脚本的目的是:
for line in `cat a.txt`; do echo $line | tr ',' '\n' | sort | uniq | tr '\n' ',' ; echo ; done
这是可行的,但我认为有一个更简单的方法
有没有一种方法可以使用命令行(在Unix上)实现这一点,而不必在脚本中编写循环?我们将非常感谢您的帮助 我想你使用awk的运气会比使用管道好得多。很高兴看到您自己用awk做了些什么,这样我们就可以帮助您克服您面临的任何挑战。如果不能做到这一点,我会这样做:
# Set our field separators
BEGIN { OFS=FS="," }
{
# Initialize variables...
delete a; x=0
# Step through the line...
for (i=1;i<=NF;i++) {
# Record "seen" values in an array, but if they're unseen,
if (!a[$i]++) {
# Print the field (possible with a separator)
if (x++) printf "%s", OFS
printf "%s", $i
}
}
# End the line
print ""
}
#设置字段分隔符
开始{OFS=FS=“,”}
{
#初始化变量。。。
删除a;x=0
#穿过这条线。。。
对于(i=1;iOn),我们鼓励用户在他们的问题中添加他们的努力,请您添加同样的努力,然后让我们知道。谢谢@RavinderSingh13;我已经完成了必要的工作。请您检查一下我的解决方案,并让我知道这是否对您有帮助?