我有一个带有 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
\r
fold
\n
\r
tr
fold
\n
\t
\t
\t