awkを使用して各行の最初の2つの部分を抽出します。

awkを使用して各行の最初の2つの部分を抽出します。

次のようにスペースで区切られたファイルがあります。

0   22:16050847:T:C 0   16050847
0   rs62224609:16051249:T:C 0   16051249
0   22:16051250:G:A 0   16051250
0   GSA-rs138295790 0   16057310

最初の2つの部分のみを抽出するように2番目の列を変更するにはどうすればよいですか?私の出力は次のようになりたいです。

0   22:16050847 0   16050847
0   rs62224609:16051249 0   16051249
0   22:16051250 0   16051250
0   GSA-rs138295790 0   16057310

ベストアンサー1

短いアッ方法:

awk '{split($2,a,":"); $2=(length(a)>1)? a[1]":"a[2] : $2}1' file

出力:

0 22:16050847 0 16050847
0 rs62224609:16051249 0 16051249
0 22:16051250 0 16051250
0 GSA-rs138295790 0 16057310

  • split($2,a,":")a- 2番目のフィールドを区切り文字で配列に分割します。:

おすすめ記事