这里简单的问题,但我有点卡住了。
假设我有一个包含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
file2的
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
答案 0 :(得分:6)
您可以使用awk
:
awk 'FNR==NR{a[$1]; next} !($1 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[$1] # store the 1st field in an array
next # move to next record
}
# while processing the file1
!($1 in a) # print a row from file1 if 1st field is not in array 'a'
答案 1 :(得分:3)
您可以使用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