如何删除文件中以特定数字开头的行?
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
这里是一个简单的问题,但我有点卡住了。
假设我有一个包含 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