bash - 查找文件中是否存在行并使用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
解决方案
哈希记录加上他们在读取时在数组中看到的文件名的次数file1
等file2
,并在处理时使用它来更新记录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
推荐阅读
- windows - vscode powershell中PATH中缺少货物
- php - 如何从 php 数组中跳过多个字符串?
- javascript - 分配后数组消失
- debugging - 调试 VS Code 主题时出现“您没有用于调试 'JSON with Comments' 的扩展”警告
- zsh - 为什么我的 zsh 脚本可以独立工作,但在被 launchd 调用时却不能?
- hypercard - HyperTalk中有switch语句式的选择控制机制吗?
- vue.js - 我想使用 Nuxt.js 添加编辑功能
- javascript - 如何使用验证码发起模拟登录请求
- javascript - Grid 项目内的排版扩展了整个网格
- javascript - 我如何使用该代码和两个下拉菜单?