文件的制表符分隔

文件的制表符分隔

我有一个带有 seq 的文件,如下所示

ATCGTTTCTCAGCCTTTTGGCAAGACCAAGTGTAGTATCTGTTCTTATCAGATATTGGTATCTGCAGGCACTCCTGGAACCAAT
ATCACTTCTCAACCTTTTGACTAAGATCAAGTGTAATATCTATCTTTATCAGTTTAATATCTGAGATCTCCTTTATCTGAGGACAATATATTTAATGGATTTTTGGAACAGAGAGAAGGAATAGGAGCTTGTCCTGTCCACTCCATGCATTGACCTGGTATTGCAGGACCTCCAGAAACACCACCCCCTCC
ACGCATTATCCGCCTATTGGCTAAAAACAAATGTAGTATCTGTTCCTATCAGTTAAAGCATCAAATGTGGTCTCTAAGTTCAGGGAATTAAATTAATATTTGGAATTGGGAGATGGTTTGGGAGCTTGCTCTATCCTCTCCATGCCTCAGCATGTAATTGCAATGCTTTCAGGAGTGGTGCATTCCTT

它有 3 条线。我希望每一行的每个字母都用制表符分隔,然后将其存储在另一个文件中。我该怎么做。

答案1

如果我正确理解了你的意图,那么这样做:

sed -e 's/./&\t/g' -e $'s/\t$//' file

第二次替换删除行尾的选项卡。

答案2

尝试使用以下方法执行此操作:

perl -ne 'print join "\t", split //' file > new_file

答案3

awk

awk -F '' -vOFS='\t' '{$1=$1}1' file > new_file

{$1=$1}1借用了这个成语一个答案你的其他问题之一。

这会将字段分隔符设置为空 ( -F ''),这意味着将逐个字符读取每个记录。输出字段分隔符设置为制表符 ( -vOFS='\t'),并且习惯用法{$1=$1}1(据我所知)是一个无操作,其副作用是导致在打印所有字段之前在每两个字段之间awk插入。OFS

答案4

我认为你应该尝试fold一下:

tr \\n \\r <infile | fold -w1 | tr '\r\n'  '\n\t' >outfile

我通过用返回替换流内的ewline 字符fold来预处理 的输入。正在为输入中的每一列打印一个ewline 字符 - 每个大写字母 - 但它会在返回时重置其计数器,因此当最终的后处理并将的ewlines 转换为abs 时,输出中没有额外的ab 字符。输出为三行,每个字符后面有一个 ab 字符,但每行最后一个字符。tr\n\rfold\n\rtrfold\n\t\t\t

相关内容