awk は条件に基づいてフィールドに追加されます。

awk は条件に基づいてフィールドに追加されます。

以下では、使用されたawkファイルの元の値に 。$22号線が代表的だ。現在の場合、「配列」(存在する場合)で値を見つけて分割して保存し、その中にフィールド数を保持するため、私のロジックは正しくありません。出力分割でカウントを印刷するかどうかによって異なります。実際のデータには何百もの行がありますが、フォーマットは常に同じです。近くに見えますが、十分ではありません。ありがとうございます:)。+1$2-inawk$2-numnum

存在する

chr15 91543131 AAW33B
chr8 100493900-100493909 SBSA

アッ

awk '{num=split($2,array,"[ -]");if(num==3){print $1,$2-1,$2,$3};if(num==4){print $1,array[1],array[2],array[2],$3}}' in | column -t

欲しい tab-delimited

chr15   91543130    91543131    AAW33B
chr8    100493900   100493909   SBSA

ベストアンサー1

次の入力が与えられた場合:

chr15 91543131 AAW33B
chr8 100493900-100493909 SBSA

簡単にawk使用できます/[ -]/(例:空白またはaを-フィールド区切り文字として使用)出力フィールド区切り文字としてタブ文字を指定することもできますawk。つまり、これ以上必要はありませんcolumn -t

$ awk 'BEGIN { FS = "[ -]"; OFS="\t" } NF==3 { print $1, $2 - 1, $2, $3 } NF==4 { print $1, $2, $3, $4 }' input
chr15   91543130    91543131    AAW33B
chr8    100493900   100493909   SBSA

または、フィールド区切り文字を保持し、2番目のフィールドに次のものが含まれていることを確認できます-

$ awk 'BEGIN { OFS="\t" } $2 !~ /-/ { print $1, $2 - 1, $2, $3 } $2 ~ /-/ { split( $2, a, "-" ); print $1, a[1], a[2], $3 }' input
chr15   91543130    91543131    AAW33B
chr8    100493900   100493909   SBSA

おすすめ記事