我在Unix上,我需要替换文件中的行。
我有这个文件
1:F
3:M
5:Z
7:Q
我需要将:
之前的行替换为此文件
1:A
2:B
3:C
4:D
5:E
6:F
7:G
8:H
9:I
10:J
11:K
12:L
最终结果应如下所示
1:F
2:B
3:M
4:D
5:Z
6:F
7:Q
8:H
9:I
10:J
11:K
12:L
我该怎么做?
答案 0 :(得分:1)
您可以使用此awk
命令:
awk -F: 'FNR==NR{a[$1]=$2; next} $1 in a{$0 = $1 FS a[$1]} 1' file1 file2
1:F
2:B
3:M
4:D
5:Z
6:F
7:Q
8:H
9:I
10:J
11:K
12:L
请在此处阅读awk
:Effective AWK Programming
答案 1 :(得分:1)
如果短文件中的行符合他们必须进入较长文件的顺序,则可以使用join
和cut
:
$ join --nocheck-order -a 2 -t ':' file1 file2 | cut -d ':' -f 1,2
1:F
2:B
3:M
4:D
5:Z
6:F
7:Q
8:H
9:I
10:J
11:K
12:L
--nocheck-order
使join
忽略输入文件没有词法,排序; -a 2
还会打印较长文件(file2
)中不匹配的行; -t ':'
将分隔符设置为冒号。仅join
命令的输出是
1:F:A
2:B
3:M:C
4:D
5:Z:E
6:F
7:Q:G
8:H
9:I
10:J
11:K
12:L
和cut
,我们得到前两个冒号分隔的列。