sed/awk/etc を使用して、あるテキストファイルの奇数行を別のテキストファイルの対応する奇数行に置き換えます。

sed/awk/etc を使用して、あるテキストファイルの奇数行を別のテキストファイルの対応する奇数行に置き換えます。

テキストファイルの1行を別のテキストファイルの対応する行に置き換えたいと思います。

ファイル1の内容:

>line1  
GGG  
>line2  
AAA  
>line3  
TTT  
>line4  
CCC  
>line5  
CAT 

ファイル2の内容:

>name.A
CTGG  
>name.B
GACC  
>name.C
CTGG  
>name.D
GGAA  
>name.E
GCTA

2つのファイルの行数は同じです。最終ファイルは次のようにする必要があります。

>name.A  
GGG   
>name.B  
AAA  
>name.C  
TTT  
>name.D  
CCC  
>name.E  
CAT 

解決策が見つかりましたが見つからないようです。私は以下を試しました。

awk 'FNR==NR {data[FNR]=$0; next} (FNR%2==1){$0=data[FNR]}1' < File1 < File2

しかし、何も起こりませんでした。

どんな助けでも大変感謝します!

ベストアンサー1

$ awk 'NR==FNR{a[NR]=$0; next} {print (FNR%2 ? $0 : a[FNR])}' file1 file2
>name.A
GGG
>name.B
AAA
>name.C
TTT
>name.D
CCC
>name.E
CAT

より簡潔で効率的であるだけでなく、:-)上記のアプローチは、次の理由であなたが使用するアプローチよりも効率的です。

  1. $ 0に割り当てられていないため、awkはレコードをフィールドに再分割することを強制しません。
  2. 1印刷するかどうかを決定する前に、各行の2番目の条件()をテストしません。

また、入力リダイレクトを使用して awk ファイルを開かないでください。複数のファイルで機能せず(見つかったように)、FILENAMEを確認する機能がなくなります。

おすすめ記事