Nam*_*ata 5 bash awk text-processing
我有 7 个字段的 2 个文件,我想根据 field1 和 field2 打印文件 1 中存在但文件 2 中不存在的行。
逻辑:我想打印所有行,其中有特定的 column1 和 column2。并且我们在文件 2 中没有找到 column1 和 column2 的集合。示例:“sc2/10 10” 这个集合你不会在文件 2 中看到,因此它被打印为输出。
文件1:
sc2/80 20 . A T 86 F=5;U=4
sc2/60 55 . G T 76 F=5;U=4
sc2/10 10 . G C 50 F=5;U=4
sc2/68 20 . T C 71 F=5;U=4
sc2/24 24 . T G 31 F=5;U=4
sc2/11 30 . A T 60 F=5;U=4
Run Code Online (Sandbox Code Playgroud)
文件2:
sc2/80 20 . A T 30 F=5;U=4
sc2/60 55 . T T 77 F=5;U=4
sc2/68 20 . C C 01 F=5;U=4
sc2/24 29 . T G 31 F=5;U=4
sc2/24 19 . G G 11 F=5;U=4
sc2/88 89 . T G 51 F=5;U=4
Run Code Online (Sandbox Code Playgroud)
预期输出:
sc2/10 10 . G C 50 F=5;U=4
sc2/11 30 . A T 60 F=5;U=4
Run Code Online (Sandbox Code Playgroud)
我会很感激你的帮助。
除非输入很大,否则我会将这些file2
对保存到哈希中并使用它来忽略file1
. 例如:
awk 'FNR == NR { h[$1,$2]; next }; !($1 SUBSEP $2 in h)' file2 file1
Run Code Online (Sandbox Code Playgroud)
输出:
sc2/10 10 . G C 50 F=5;U=4
sc2/24 24 . T G 31 F=5;U=4
sc2/11 30 . A T 60 F=5;U=4
Run Code Online (Sandbox Code Playgroud)
IIUCsc2/24 24
正确包含在输出中。
FNR == NR { h[$1,$2]; next }
$1/$2
将对保存到h
哈希中(请注意,通过下标访问数组足以分配它),但只能从第一个输入文件 ( file2
) 中保存。该next
命令跳到下一条记录。! ($1 SUBSEP $2 in h)
仅对不包含对的file1
行进行评估并将调用默认块。默认块是. (注意:避免使用(same as ) 因为那样会分配它)$1/$2
{ print $0 }
!h[$1,$2]
!h[$1 SUBSEP $2]
以上假设在文件的前两个字段中找不到SUBSEP
(通常是^\
字符)的值。
归档时间: |
|
查看次数: |
3280 次 |
最近记录: |