从文件中的行中删除重复的字符串

时间:2016-09-01 19:22:18

标签: bash awk sed uniq

我正在尝试删除文件中行内的重复字符串。我尝试使用uniq,但这仅适用于删除重复行,而不是重复行中的字符串。

我只关心=符号后面的“单词”,“单词”是任何非空格序列,但不能包含=符号。

我的文件如下所示:

LINE1=hello hello world
LINE2=hello world world
LINE3=hello hello hello

我希望它看起来像:

LINE1=hello world
LINE2=hello world
LINE3=hello

4 个答案:

答案 0 :(得分:2)

这是对您可能要寻找的内容的一种可能解释:

$ awk -F'=' '{words=""; delete seen; split($2,t,/ /); for (i=1;i in t;i++) if (!seen[t[i]]++) words = (words=="" ? "" : words " ") t[i]; print $1 FS words}' file
LINE1=hello world
LINE2=hello world
LINE3=hello

它基于很多假设,但主要是你只关心=符号后面的“单词”,而“单词”是任何非空格序列但不能包含=个符号

答案 1 :(得分:1)

我想出了这个awk:

awk -F '[= ]' '{delete a; a[$2]++; printf "%s=%s", $1, $2; 
   for (i=3; i<=NF; i++) if (!a[$i]++) printf "%s%s", OFS, $i; print ""}' file

LINE1=hello world
LINE2=hello world
LINE3=hello

答案 2 :(得分:1)

int start() {
  while (!IsStopped()) {
    Sleep(2000);

  int handle;
  int value;
  handle=FileOpen("https://www.quandl.com/api/v3/datasets/ADB/LAB_UNEMP_JPN.csv?rows=1&api_key=my_api_key", FILE_CSV, ';');
  if(handle>0)
    {
     value=FileReadNumber(handle);
     Print(handle);
     FileClose(handle);
    }
}

答案 3 :(得分:0)

awk 'NF--{sub(/hello/,"world",$2)}/LINE3/{sub(/world/,"")}1' file

LINE1=hello world
LINE2=hello world
LINE3=hello