2番目の列の最初の75文字(スペースを含み、ファイル内の列が2つだけであると想定)だけを印刷する場合は、次のようにします。
$ perl -pe 's/(\t.{75}).*/$1/' file
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
または、GNUの場合sed
:
$ sed 's/\(.*\t.\{75\}\).*/\1/' file
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
または:
$ sed -r 's/(.*\t.{75}).*/\1/' file
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
または、を使用fold
して、最初の91文字(識別子は8文字、タブは8文字)でカットするように指示し、最初の行のみを印刷することもできます。
$ fold -w 91 file | head -n1
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
ファイルに2列を超える列を含めることができ、2番目の列のみを切り捨てたい場合は、これを行うことができます(これは、先ほど気付いたように、Stephenの答えの言い換えにすぎません)。
$ awk -F"\t" -vOFS="\t" '{$2=substr($2,1,75)}1;' file
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
または(2番目の列の最初の75文字が正規表現として解釈できる場合、これは壊れることに注意してください):
$ perl -F"\t" -pale 's/$F[1]/substr($F[1],0,75)/e' file
XY981743 foobarlkasdf saflkas asfZR!sgfad asdSAD asdsadf SAdfasdf46lk lksad bar fool
awk 'BEGIN{OFS=FS="\t"} {$2=substr($2,1,75)}1' file