テキストファイルの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
より簡潔で効率的であるだけでなく、:-)上記のアプローチは、次の理由であなたが使用するアプローチよりも効率的です。
- $ 0に割り当てられていないため、awkはレコードをフィールドに再分割することを強制しません。
1
印刷するかどうかを決定する前に、各行の2番目の条件()をテストしません。
また、入力リダイレクトを使用して awk ファイルを開かないでください。複数のファイルで機能せず(見つかったように)、FILENAMEを確認する機能がなくなります。