如何删除文件中以特定数字开头的行?

How to delete lines starting with certain numbers in a file?

这里是一个简单的问题,但我有点卡住了。

假设我有一个包含 20 行和 4 列的文件。第一列是一个数字(1 到 20)。

我还有一个文件,里面有几个数字,像这样

1
4
19

现在,如何删除以第二个文件中的数字开头的行(在第一个文件中)。我的主要问题是,如果我执行 sed,数字 1 将得到 10、11、12 等等。我怎样才能以正确的方式做到这一点?

非常感谢!

编辑:示例

文件 1

1       a       a       a
2       b       b       b
3       c       c       c
4       d       d       d
5       e       e       e
6       f       f       f
7       g       g       g
8       h       h       h
9       i       i       i
10      j       j       j
11      k       k       k
12      l       l       l
13      m       m       m
14      n       n       n
15      o       o       o
16      p       p       p
17      q       q       q
18      r       r       r
19      s       s       s
20      t       t       t

文件 2

1
4
19

我想要的结果:

2       b       b       b
3       c       c       c
5       e       e       e
6       f       f       f
7       g       g       g
8       h       h       h
9       i       i       i
10      j       j       j
11      k       k       k
12      l       l       l
13      m       m       m
14      n       n       n
15      o       o       o
16      p       p       p
17      q       q       q
18      r       r       r
20      t       t       t

您可以为此使用 awk

awk 'FNR==NR{a[]; next} !( in a)' file2 file1
2       b       b       b
3       c       c       c
5       e       e       e
6       f       f       f
7       g       g       g
8       h       h       h
9       i       i       i
10      j       j       j
11      k       k       k
12      l       l       l
13      m       m       m
14      n       n       n
15      o       o       o
16      p       p       p
17      q       q       q
18      r       r       r
20      t       t       t

awk 命令分解:

FNR == NR {                  # While processing the file2
  a[]                      # store the 1st field in an array
  next                       # move to next record
}
                             # while processing the file1
!( in a)                   # print a row from file1 if 1st field is not in array 'a'

您可以使用 sed 创建删除给定行的 sed 脚本:

 sed 's=^=/^=;s=$=\s/d=' numbers

它创建以下 sed 脚本:

/^1\s/d
/^4\s/d
/^19\s/d

即删除以 1、4 或 19 开头后跟空格的行。

您可以直接将其通过管道传输到 sed 到 运行 它:

sed 's=^=/^=;s=$=\s/d=' numbers | sed -f- input-file