2017-10-02 3 views
1

ファイルBの行番号に従って。ファイルBでは、各行は3つのフィールドで構成されています(タブで別々に区切られています)。最初のフィールドは整数で、2番目と3番目のフィールドは文字列です。今、ファイル番号がファイルB(最初のフィールド)に表示されている場合、ファイルAの行を変更したいと思います。変更することで、私は例えばファイルの行の一部を置換する方法私は2つのファイルのファイルAを持っているし、ファイルAで</p> <p>行は、タブまたは単一のフィールドで区切ら二つのフィールドのいずれかで構成さB.ファイル

は、のは、私は3行

を含むファイルAを持っているとしましょう、私はタブによるファイルBでその行の2番目と3番目のフィールドをマージし、ファイル内の対応する行を入れたいわけ
File A: 
poo foo 
koo goo 
too roo 

私は2行のファイルを持っています。終わり

File B: 
2 change-second-line with-this 
3 change-third-line with-that 

、私は次の内容のファイルたい:

File final: 
poo foo 
change-second-line with-this 
change-third-line with-that 

はそれを行うための方法はありますか?一般的に、質問をしながら私は私の努力を示すコードスニペットを入れましたが、今回は私もそれを行うために書くことができませんでした。

答えて

0
awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next} 
    FNR in arr{print arr[FNR];next}1 
    ' fileB fileA 

OR

awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next} 
    FNR in arr{print arr[FNR];next}1 
    ' fileB fileA 

試験結果:

$ cat fileA 
poo foo 
koo goo 
too roo 

$ cat fileB 
2 change-second-line with-this 
3 change-third-line with-that 

$ awk 'FNR==NR{arr[$1]=substr($0,index($0,$2));next}FNR in arr{print arr[FNR];next}1' fileB fileA 
poo foo 
change-second-line with-this 
change-third-line with-that 

# OR will be faster too 
$ awk 'FNR==NR{arr[$1]=substr($0,length($1)+2);next}FNR in arr{print arr[FNR];next}1' fileB fileA 
poo foo 
change-second-line with-this 
change-third-line with-that 
関連する問題