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