file
次のタブで区切られた項目があります。
$ cat file
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
ここで、、、1155234
の後にはタブ
文字が続きます(つまり、6番目(最後)の列を除いてファイルにスペースはありません)。5番目の列にタブ文字を追加し、最初の行と6番目の列の終わりにあるタブ文字をスペースに置き換えたいと思います。出力は次のとおりです。1156286
1156298
1156807
1156804
1157820
0
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
awkまたはsedを使用してこれをどのように実行できますか?
ベストアンサー1
タブ区切りの列が6つあるように見えますが、5列の値が欠落しているため、一部の処理では6列の最初の単語を5列に残しました。これは、タブの代わりにスペースまたは一般スペースを区切り文字として使用する前の処理ステップによるものです。
次に、列5に0を挿入し、単語を列6の正しい位置に移動しようとしています。
私はファイルが次のようになると仮定します。ここで、それぞれはタブ文字です(これは^I
ファイルの出力です)。cat -t
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558474.1^I1155234^I1156286^Ipolyketide^Isynthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558475.1^I1156298^I1156807^I12^Icarboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn^IWP_011558476.1^I1156804^I1157820^I-3^Ioxidoreductase [Mycobacterium]
空の列2があるかどうかはわかりません。その場合は、以下に使用した列番号に1つを追加してください。
$ awk -F '\t' 'BEGIN { OFS=FS } $5 ~ /[[:alpha:]]/ { $6 = $5 " " $6; $5 = 0 } { print }' file
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558474.1 1155234 1156286 0 polyketide synthase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558475.1 1156298 1156807 12 carboxyl methyltransferase [Mycobacterium]
GCF_000014165.1_ASM1416v1.dist_nbr_anntn WP_011558476.1 1156804 1157820 -3 oxidoreductase [Mycobacterium]
awk
ここでは、5番目の列の文字を検出するために使用しています。その場合は、5列の前にスペースを追加して6列を区切り、5列を0に設定します。その後、変更するかどうかに関係なくすべての行を出力します。