是否有针对此问题的perl或awk解决方案?

拉梅什

我有一个输入文件(input.txt)如下。

id1      id2       name    weight 
53723848 12651711 timburnes 1.36667
53530214 12651711 timburnes 1.51191
53723848 53530214 timburnes 1.94
764157 52986038 ericcartman 0.861145
56797854 764157 ericcartman 1.35258
56797854 52986038 ericcartman 1.73781

请注意,第一行不是实际文件的一部分,为清楚起见,我在此处添加了它

我想提取的值id1,并id2以2个名为独立文件unique.txtduplicate.txt

如果我的weight列值大于1.5,则表示我有重复的id在这种情况下,我会将id1值移到unique.txt文件,将id2值移到duplicate.txt文件。

如果我的体重栏小于1.5,则表示我没有重复的值。所以,在这种情况下,我将移动都id1id2unique.txt文件。

因此,对于上述输入,我希望输出为

对于unique.txt文件,

53723848 timburnes
764157 ericcartman
56797854 ericcartman

对于重复的.txt文件,

12651711 timburnes
53530214 timburnes
52986038 ericcartman

我可以使用以下代码找出重复项。

要基于第4列获得大于1.5的值,

awk -F" " '$4 >= 1.5 { print $1" " $2" " $3" " $4}' file1.txt > Output.txt

现在,对于大于1.5的值,我可以使用下面的代码根据重复的ID合并它们的名称。

  perl -ane 'foreach(@F[0..1]){$k{$F[2]}{$_}++}
           END{
                foreach $v (sort keys(%k)){
                    print "$_ " foreach(keys(%{$k{$v}})); 
                    print "$v\n"
                }; 
            } ' Output.txt

但是,我无法以上述方式获得所需的输出。

编辑

我正在为我的输入运行命令,如下所示。

awk '{
      if ($4 > 1.5) { 
          if (++dup[$2] == 1)  print $2, $3 > "duplicate.txt"
      } 
      else
          if (++uniq[$1] == 1) print $1, $3 > "unique.txt" 
}' << END
17412193 43979400 ericcartman 2.16667
21757330 54678379 andrewruss 0.55264
END 

我得到的输出是,

-bash-3.2$ cat unique.txt
21757330 a.andreev
-bash-3.2$ cat duplicate.txt
43979400 ericcartman

但是,我期望的输出是

cat unique.txt
17412193 ericcartman
21757330 andrewruss
54678379 andrewruss
cat duplicate.txt
43979400 ericcartman
cuonglm

这是awk解决方案:

$ awk '
    $4 < 1.5 {
      uniq[$1] = $3;
      uniq[$2] = $3;
      next;
  }
  {
      uniq[$1] = $3;
      dup[$2] = $3;
      delete uniq[$2];
  }
  END {
    print "--unique.txt--";
    for(i in uniq) {
        print i,uniq[i]
    }
    print "";
    print "--duplicate.txt--";
    for(i in dup) {
        print i,dup[i]
    }
    }' file
--unique.txt--
764157 ericcartman
56797854 ericcartman
53723848 timburnes

--duplicate.txt--
53530214 timburnes
52986038 ericcartman
12651711 timburnes

与您的第二个示例:

$ awk '
    $4 < 1.5 {
      uniq[$1] = $3;
      uniq[$2] = $3;
      next;
  }
  {
      uniq[$1] = $3;
      dup[$2] = $3;
      delete uniq[$2];
  }
  END {
    print "--unique.txt--";
    for(i in uniq) {
        print i,uniq[i]
    }
    print "";
    print "--duplicate.txt--";
    for(i in dup) {
        print i,dup[i]
    }
    }' << END
> 17412193 43979400 ericcartman 2.16667
> 21757330 54678379 andrewruss 0.55264
END
--unique.txt--
21757330 andrewruss
54678379 andrewruss
17412193 ericcartman

--duplicate.txt--
43979400 ericcartman

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否有针对Java的现成时钟同步解决方案?

是否有针对依赖选择字段的JavaScript解决方案?

是否有针对依赖netrc的程序的Windows解决方案?

没有针对NullPointerException的解决方案

Django模型针对此反向ForeignKey的最佳解决方案

Firebase未与React Application连接-权限被拒绝-对此无解决方案在线检查了所有问题

Selenium Webdriver:针对与@BeforeTest(TestNG)有关的非常具体的问题需要解决方案

是否有针对我的需求的 Spring boot Security 特定解决方案?

是否存在针对彼此增长的双分区的解决方案?

是否有for循环或purrr解决方案?

在尝试捕获方法之后是否有更好的解决方案来解决(不继续)问题?

是否存在针对我的限制和日期过滤器问题的sqlite干净解决方案/语法

从最大到最小的值的位置顺序是否有问题,有解决方案吗?

是否可以对此进行更向量化的解决方案?

JTextField仅显示带有GridBagLayout的缝隙,针对类似问题我发现的解决方案不起作用

是否可以通过自定义跟踪解决方案代替Lighthouse,以针对现有Steam游戏的大型房间VR?

这个问题的解决方案有什么问题

LCS 问题的给定解决方案有什么问题?

是否有解决此死锁的解决方案?

UEFI解决方案问题

该解决方案有什么问题?

这个问题有更优雅的解决方案吗?

嵌套函数有问题,或寻找更好解决方案的指导

这个pip问题有什么解决方案吗?

在Julia中针对网络优化问题的此解决方案正确吗?

Javascript的评估顺序是否有更好的解决方案?

是否有用于SomeButNotAll()的优雅LINQ解决方案?

openbox是否有任何屏幕锁定解决方案?

确定数独是否具有独特的解决方案