ファイルのn番目の列と最初の行に文字列を追加するには?

ファイルのn番目の列と最初の行に文字列を追加するには?

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番目の列の終わりにあるタブ文字をスペースに置き換えたいと思います。出力は次のとおりです。115628611562981156807115680411578200

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に設定します。その後、変更するかどうかに関係なくすべての行を出力します。

おすすめ記事