awk文本处理多文件多行匹配的问题

时间:2021-09-12 10:08:55
文件a包括一组序号,例如:
1
4
6

另一个文件b包括若干条目,格式为:
1 record a
1 record b
1 record c
2 record d
2 record e
3 record f
4 record g
4 record h
5 record i
5 record j
6 record k

现在希望删除b中所有序号在a中出现的这些行,在上面例子中,只剩下序号为2,3,5的行(共计剩5行)

用python之类还是非常容易实现的,好奇想试试用一行awk来解决,请大家赐教~谢谢

7 个解决方案

#1


for N in `cat a`
do
    sed -i "/^$N/d" b
done

#2


it doesn't work.... no output

引用 1 楼 *mill 的回复:
for N in `cat a`
do
    sed -i "/^$N/d" b
done

#3


另外,我想知道在b中哪些行(行号)被删除了,有可能么
b加了行号后似乎就没那么方便用sed处理了,因为匹配的换成了第二列 当然把行号加到行尾还是可以继续用以上方法的

#4


根据一个以前的回复,自己搞了一下 awk文本处理多文件多行匹配的问题


awk 'NR==FNR{b[1] = $0}NR>FNR{if($1 in b); else print $0}' a b

#5


awk -F " " '/^[2,3,5]/{print $0}'    b

#6


awk -F " " '/^[2,3,5]/{print $0}'    b

#7


awk -F " " '/^[2,3,5]/{print $0}'    b

#1


for N in `cat a`
do
    sed -i "/^$N/d" b
done

#2


it doesn't work.... no output

引用 1 楼 *mill 的回复:
for N in `cat a`
do
    sed -i "/^$N/d" b
done

#3


另外,我想知道在b中哪些行(行号)被删除了,有可能么
b加了行号后似乎就没那么方便用sed处理了,因为匹配的换成了第二列 当然把行号加到行尾还是可以继续用以上方法的

#4


根据一个以前的回复,自己搞了一下 awk文本处理多文件多行匹配的问题


awk 'NR==FNR{b[1] = $0}NR>FNR{if($1 in b); else print $0}' a b

#5


awk -F " " '/^[2,3,5]/{print $0}'    b

#6


awk -F " " '/^[2,3,5]/{print $0}'    b

#7


awk -F " " '/^[2,3,5]/{print $0}'    b