簡體   English   中英

使用awk或sed按行號合並兩個文件

[英]Merge two files by line numbers using awk or sed

我有兩個文件,分別是FileA和FileB。 FileA有n行,FileB有5n行。 我想將這兩個文件合並到一個新文件FileC中,以便FileB中的第5行被FileA中的一行替換。

FileA:0 \\ n,1 \\ n

FileB:A \\ n B \\ n C \\ n D \\ n E \\ n F \\ n G \\ n H \\ n I \\ n J \\ n

FileC:0 \\ n B \\ n C \\ n D \\ n E \\ n 1 \\ n G \\ n H \\ n I \\ n J \\ n

(\\ n是換行符)

我知道如何使用Shell中的循環來執行此操作,但是我希望學習使用awk或sed進行此操作的更簡潔的方法。 我發現了許多使用awk處理兩個文件的解決方案,但是它們大多基於字段比較而不是行號。 如果這個問題是重復的,我深表歉意,如果是的話,請指出類似的問題並給出答案。

awk '{if(NR%5==1) { getline line < "FILEA"; print line; } else { print $0; }}' FILEB

如果要將文件名用作參數,也可以嘗試以下操作:

awk 'NR!=FNR{exit} {if(NR%5==1) { getline line < ARGV[2]; print line; } else { print $0; }}' FILEB FILEA
awk 'NR!=FNR{exit}NR%5==1{getline <ARGV[2]}{print}' FileB FileA

請注意,文件名以相反的順序輸入:largefile smallfile。

這也可以很好地處理FileA小於FileB的1/5的情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM