Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 用于在大文件的每行中提取唯一值的脚本_Shell_Unix_Awk - Fatal编程技术网

Shell 用于在大文件的每行中提取唯一值的脚本

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 这是可行的,但我认为有一个更简单的方法 有没有一种方法可以使用命令行

我有一个很大的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
这是可行的,但我认为有一个更简单的方法


有没有一种方法可以使用命令行(在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;我已经完成了必要的工作。请您检查一下我的解决方案,并让我知道这是否对您有帮助?