我在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
哪有我這樣做?
我在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
哪有我這樣做?
您可以使用此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
@GgLaPoule:這是否適合您? – anubhava
如果在短期文件中的行是在它們不得不進入較長的文件中的順序,你可以使用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
,我們得到的這前兩個冒號分隔列。
請[編輯]你的問題,以顯示[你迄今爲止嘗試過的](http://whathaveyoutried.com)。您應該包含您遇到問題的代碼[mcve],然後我們可以嘗試幫助解決特定問題。你還應該閱讀[問]。 –
你用'awk'試過了嗎?你嘗試過與另一個? –
我嘗試過sed,但我找不到解決它的理由 – GgLaPoule