Bash 根据行号合并两个文件,其中第一个文件中的行优先

Bash 根据行号合并两个文件,其中第一个文件中的行优先,bash,unix,text,Bash,Unix,Text,我在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 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 我该怎么做?您可以

我在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
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

我该怎么做?

您可以使用此
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的内容:

您可以使用此
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

如果短文件中的行是按照它们进入长文件的顺序排列的,您可以使用
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
使
连接
忽略输入文件不是按词汇排序的
-a2也打印较长文件中不匹配的行(
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
,我们可以得到这个文件的前两列,以冒号分隔。

如果短文件中的行是按照它们进入长文件的顺序排列的,您可以使用
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
使
连接
忽略输入文件不是按词汇排序的
-a2也打印较长文件中不匹配的行(
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
,我们得到了这篇文章的前两个冒号分隔列。

请将您的问题显示出来。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。您还应该阅读。您是否尝试过使用
awk
?你试过另一个吗?我试过sed,但我找不到解决它的理由请你的问题来说明。你应该包括一个你有问题的代码,然后我们可以尝试帮助解决具体的问题。您还应该阅读。您是否尝试过使用
awk
?你试过另一个吗?我试过sed,但我找不到解决它的理由