[英]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.