
次のようにタブ区切りのファイルがあります。
NZ_CP023599.1 WP_003911075.1 302845 305406
NZ_CP023599.1 WP_003898428.1 471171 472583
NZ_CP023599.1 WP_003402248.1 534387 535157
NZ_CP023599.1 WP_003402301.1 552556 553950
NZ_CP023599.1 WP_003402318.1 558837 559697
次の行の3番目の列の数字から各行の4番目の列の数字を減算し、次の行の違いを5番目の列に印刷する必要があります。
出力は次のとおりです。
NZ_CP023599.1 WP_003911075.1 302845 305406
NZ_CP023599.1 WP_003898428.1 471171 472583 165765
NZ_CP023599.1 WP_003402248.1 534387 535157 61804
NZ_CP023599.1 WP_003402301.1 552556 553950 17399
NZ_CP023599.1 WP_003402318.1 558837 559697 4887
この問題を解決するためにawkをどのように使用できますか?
答え1
次のようにこれを行うことができます。最初の行を除いて減算を延期しますが、最後の列の値を後続の行の入力として取得します。
awk -F'\t' 'BEGIN { OFS = FS } NR == 1 { last = $4; print; next }{ $5 = $3 - last; last = $4 }1' file
答え2
awk -F\\t '{ if (length(prev4)>0) { col5 = FS ($3-prev4) }; print $0 col5; prev4 = $4 }' InputFile