【发布时间】:2020-11-14 09:22:25
【问题描述】:
我在 bash 脚本中使用 awk 来比较两个文件以获取不匹配的行。 我需要将第二个文件的所有三个字段(作为一个模式?)与第一个文件的所有行进行比较:
第一个文件:
chr1 9997 10330 HumanGM18558_peak_1 150 . 10.78887 18.86368 15.08777 100
chr1 628885 635117 HumanGM18558_peak_2 2509 . 83.77238 255.95094 250.99944 5270
chr1 15966215 15966638 HumanGM18558_peak_3 81 . 7.61567 11.78841 8.17169 200
第二个文件:
chr1 628885 635117
chr1 1250086 1250413
chr1 16613629 16613934
chr1 16644496 16644800
chr1 16895871 16896489
chr1 16905126 16905616
目前的思路是在一个数组中加载一个文件,使用AWK的负正则表达式进行比较。
readarray a < file2.txt
for i in "${a[@]}"; do
awk -v var="$i" '!/var/' file1.narrowPeak | cat > output.narrowPeak
done
问题是'!/var/' 没有使用变量。
【问题讨论】:
-
请将该示例输入的所需输出(无描述)添加到您的问题(无评论)。
-
仔细查看stackoverflow.com/questions/19075671/…,只有一条关于如何将变量用作正则表达式的评论,而不是该问题中负正则表达式的提示。
$0 !~ var是您正在寻找的依据问题标题,但是使用 awk 而不是 bash+awk 有更好的解决方案 -
为什么不
grep -v "$i" -
另外使用 shell 循环来处理文本是个坏主意。检查unix.stackexchange.com/questions/169716/…
-
管道到
cat是我的新UUOC!