これを行うより簡単な方法があるかどうか疑問に思います。
awk 'NR > 1 {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9$10$11$12$13$14$15$16}' file.in > file.out
簡単に言うと、「間にあるタブ文字を削除して9列から16列を結合します」です。
結合された列9-16は「コメント」になるため、スペースを含めることができます。
現在16列ありますが、必要に応じて増減できます。結局、列9(9-16接続)は「説明」フィールドになります。
乾杯、習近
平
答え1
paste <(cut -f 1-8 file) <(cut -f9- file | tr -d '\t')
答え2
答え3
はい、いくつかの方法があります。生成されたファイルで次の2つをテストしました。
perl -le 'next if $.==1; for(1..20){print join "\t",1..20 }' > file
ファイルには20行と20タブで区切られた列があります。
真珠
perl -F'\t' -ale '$"="\t";print "@F[0..7]",@F[8..$#F]' file
これにより、10番目のフィールドから最後まですべてのフィールドがリンクされます。 9 を 16 にのみ接続するには、次のコマンドを使用します。
perl -F'\t' -ale '$"="\t"; print "@F[0..7]", @F[8..15], "\t@F[16..$#F]"' file
アッ
awk -F'\t' 'NR>1{ for(i=1;i<9;i++){ printf "%s\t",$i } for(i=9;i<=NF;i++){ printf "%s",$i }print "" }' file
前と同様に、数字 10 以降のすべての列を結合します。 9 を 16 にのみ接続するには、次のコマンドを使用します。
awk -F'\t' 'NR>1{ for(i=1;i<9;i++){ printf "%s\t",$i } for(i=9;i<=16;i++){ printf "%s",$i } for(i=17;i<=NF;i++){ printf "\t%s", $i } print "" }' file
もちろん、awk
解決策は非常に短くはありませんが、少なくともすべてのフィールドを手動で指定する必要はありません。
答え4
GNUを使用するsed
(フィールドが入力からタブで区切られていると仮定):
sed 's/\t//9g'
各行の最後の9番目のタブ文字を削除します。
入力に16を超えるフィールドがあり、追加のフィールドが必要ない場合:
cut -f 1-16 | sed 's/\t//9g'