首页 > 解决方案 > 查找文件中是否存在行并使用awk添加具有文件名的列?

问题描述

在这里,我问了同样的问题并得到了正确答案:如何查找文件中是否存在行并使用 awk 添加具有文件名的列?

正如@RavinderSingh13 建议的那样,我打开了这个新线程,提供了更多详细信息。

我有一个像这样的文件作为数据库(db_file.txt):

  CHROM  POS REF ALT
  chr1   10  T   A
  chr1   12  T   G
  chr1   12  T   C

还有大量文件,我需要在其中检查数据库文件中是否已经存在一行。如果存在一行,我必须添加一个带有文件名的新列。

包含两个文件的示例

文件1:

  CHROM  POS REF ALT          
  chr1   10  T   A                                   
  chr1   13  T   C              

文件2:

    CHROM  POS REF ALT
     chr1   12  T   G  
     chr1   10  T   A

预期输出:

  CHROM  POS REF ALT
  chr1   10  T   A   file1   file2
  chr1   12  T   G   file2
  chr1   12  T   C    

我正在尝试使用此代码,但我没有得到我需要的东西:

 for i in `ls directory`;do

      awk 'FNR==1 && FNR==NR{print;next}

      FNR==NR{a[$0]=FILENAME;next}FNR>1{

      print $0,$0 in a?OFS a[$0]:""}' $i $directory/db_file.txt

  done

标签: bashawk

解决方案


哈希记录加上他们在读取时在数组中看到的文件名的次数file1file2,并在处理时使用它来更新记录db_file.txt$1=$1是否存在挤压空间,如果不需要,请将其丢弃。

awk '{$1=$1} FILENAME!="db_file.txt"{a[$0,++n[$0]]=FILENAME;next}
FNR>1{r=$0;for(i=1;i<=n[r];++i) $(NF+1)=a[r,i]}1' file{1,2} db_file.txt

推荐阅读