最初の 2 つのフィールドは _ で区切られ、残りのフィールドはそのまま残ります。

最初の 2 つのフィールドは _ で区切られ、残りのフィールドはそのまま残ります。
#CHROM  POS     REF     ALT     ../S101_sorted.bam      ../S102_sorted.bam          ../S105_sorted.bam      ../S107_sorted.bam      ../S113_sorted.bam      ../S114_sorted.bam      ../S115_sorted.bam      ../S
Aradu.A01       296611  T       C       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T/C     T       T/C     T       T       T       T
Aradu.A01       326689  T       C       T/C     T       T       T       T/C     T       T       T       T/C     T/C     T       T       T       T       T       T       T       T/C     T/C     T       T
Aradu.A01       615910  T       G       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T       T
Aradu.A01       661394  T       A       T       T       T       T       T       T/A     T       T       T       T       T       T       T       T       T       T       T       T       T       T       T
Aradu.A01       941674  C       T       C       C/T     C       C       C/T     C       C       C       C       C       C       C       C       C       C       C       C       C       C       C       C
Aradu.A01       942064  C       T       C/T     C/T     C/T     C/T     C/T     C       C       C/T     C       C/T     C/T     C       C       C/T     C/T     C       C       C       C       C/T     C/T
Aradu.A01       954858  G       A       G/A     G       G       G       G       G       G       G       G       G       G       G       G       G       G       G       G/A     G       G       G       G
Aradu.A01       1196780 C       A       C/A     C       C       C       C       C       C       C       C       C       C       C/A     C       C       C/A     C       C       C       C       C       C

上記の形式のファイルがあり、_残りの列で区切られた最初の2つの列をそのまま印刷しようとしています。次のスクリプトを試しましたが、awk出力は返されません。

awk '{if (NR>1) print $1"_"$2; for(i=3;i<NF;i++) printf "\t", $i}' input_file > out_file.

誰もが私がここで何を間違っているかを提案できますか?

ベストアンサー1

最初の2列間のスペースを下線に変更するには、次のことをお勧めしますsed

 sed -e 's/[\t ]\+/_/'

ヘッダー行を無視する必要がある場合:

sed -e '/^#/! s/[\t ]\+/_/'

またはより一般的な場合(ヘッダーは任意の文字で始まり、\tのみ適用されますgnu sed

sed -E '1! s/[[:blank:]]+/_/'

awkコードに関する質問の場合、最初のコードはおそらく見苦しい改行文字を印刷しないようにする必要がprintあります。printf

おすすめ記事