标签:换行 产生 rto 工具 文本处理工具 agg log 包含 数字
# 产生从1到10的数,步长为1 $ seq 1 10 1 2 3 4 5 6 7 8 9 10 # 产生从1到10的数,步长为1,用空格分割 $ seq -s ‘ ‘ 1 10 1 2 3 4 5 6 7 8 9 10 # 产生从1到10的数,步长为2 # 如果有3个数,中间的数为步长,最后一个始终为最大值 $ seq -s ‘ ‘ 1 2 10 1 3 5 7 9 $ cat <(seq 0 3 17) <(seq 3 6 18) >test $ cat test 0 3 6 9 12 15 3 9 15
# 可能不符合预期的排序,系统首先排0,然后排1, 3, 6, 9 $ sort test 0 12 15 15 3 3 6 9 9 # 按数字大小排序 $ sort -n test 0 3 3 6 9 9 12 15 15
$ sort -nu test 0 3 6 9 12 15
$ sort -n test | uniq -d 3 9 15
# 第一列为每行出现的次数,第二列为原始的行 $ sort -n test | uniq -c 1 0 2 3 1 6 2 9 1 12 2 15 # 换一个文件看的更清楚 $ cat <<END >test2 > a > b > c > b > a > e > d > a > END # 第一列为每行出现的次数,第二列为原始的行 $ sort test2 | uniq -c 3 a 2 b 1 c 1 d 1 e # 在执行uniq操作前,文件要先排序,不然结果很诡异 $ cat test2 | uniq -c 1 a 1 b 1 c 1 b 1 a 1 e 1 d 1 a
# awk的操作就是镀金上一步的结果,去除多余的空白,然后调换2列 $ sort test2 | uniq -c | awk ‘BEGIN{OFS="\t";}{print $2, $1}‘ a 3 b 2 c 1 d 1 e 1
# 第二列按数值大小排序 $ sort test2 | uniq -c | awk ‘BEGIN{OFS="\t";}{print $2, $1}‘ | sort -k2, 2n c 1 d 1 e 1 b 2 a 3 # 第二列按数值大小排序 # 第二列相同的再按第一列的字母顺序的逆序排序 (-r) # 注意看前3行的顺序与上一步结果的差异 $ sort test2 | uniq -c | awk ‘BEGIN{OFS="\t";}{print $2,$1}‘ | sort -k2,2n -k1,1r e 1 d 1 c 1 b 2 a 3
# 生成单行序列FASTA文件 $ cat <<END >test.fasta > >SOX2 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > >POU5F1 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > >NANOG > CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT > END $ cat test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC >POU5F1 ACGAGGGACGCATCGGACGACTGCAGGACTGTC >NANOG CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT # grep匹配含有SOX2的行 # -A 1 表示输出的行中,包含匹配行的下一行 (A: after) $ grep -A 1 ‘SOX2‘ test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC # 先判断当前行是不是 > 开头,如果是,表示是序列名字行,替换掉大于号,取出名字。 # sub 替换, sub(被替换的部分,要替换成的,待替换字符串) # 如果不以大于号开头,则为序列行,存储起来。 # seq[name]: 相当于建一个字典,name为key,序列为值。然后就可以使用name调取序列。 $ awk ‘BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} else seq[name]=$0;}END{print ">SOX2"; print seq["SOX2"]}‘ test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC
$ cat <<END >test.fasta > >SOX2 > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGAC > >POU5F1 > CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT > CGGAAGGTAGTCGTCAGTGCAGCGAGTCC > >NANOG > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGG > ACGAGGGACGCATCGGACGACTGCAGGACTGTC > ACGAGGGACGCATCGGACGACTGCAGGACTGT > END # 给>号开头的行的行尾加个TAB键,以便隔开名字和序列 # TAB键不可见,直接看看不大 # \(\)表示记录匹配的内容,\1则表示()中记录的匹配的内容 # 后面我们专门讲sed $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT #使用cat -A 可以显示文件中所有的符号 # ^I 表示tab键 # $表示行尾 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | cat -A >SOX2^I$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGAC$ >POU5F1^I$ CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT$ CGGAAGGTAGTCGTCAGTGCAGCGAGTCC$ >NANOG^I$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGG$ ACGAGGGACGCATCGGACGACTGCAGGACTGTC$ ACGAGGGACGCATCGGACGACTGCAGGACTGT$ # 把所有的换行符替换为空格 # 主意第二个参数,引号内为空格 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | tr ‘\n‘ ‘ ‘ >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT # 把最后一个空格替换为换行符 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | tr ‘\n‘ ‘ ‘ | sed -e ‘s/ $/\n/‘ >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT # 把 ‘ >‘替换为换行符 注意被替换的是 空格+大于号 # 当连用多个替换命令时,使用-e 隔开 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | tr ‘\n‘ ‘ ‘ | sed -e ‘s/ $/\n/‘ -e ‘s/ >/\n>/g‘ >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGT CGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGG ACGAGGGACGCATCGGACGACTGCAGGACTGTC ACGAGGGACGCATCGGACGACTGCAGGACTGT # 把所有的空格替换掉 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | tr ‘\n‘ ‘ ‘ | sed -e ‘s/ $/\n/‘ -e ‘s/ >/\n>/g‘ -e ‘s/ //g‘ >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT # 把TAB键转换为换行符 $ sed ‘s/^\(>.*\)/\1\t/‘ test.fasta | tr ‘\n‘ ‘ ‘ | sed -e ‘s/ $/\n/‘ -e ‘s/ >/\n>/g‘ -e ‘s/ //g‘ -e ‘s/\t/\n/g‘ >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC >POU5F1 CGGAAGGTAGTCGTCAGTGCAGCGAGTCCGTCGGAAGGTAGTCGTCAGTGCAGCGAGTCC >NANOG ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGT
# 差别只在一点 # 对于单行fasta文件,只需要记录一行,seq[name]=$0 # 对于多好fasta文件,需要把每一行序列都加到前面的序列上,seq[name]=seq[name]$0 $ awk ‘BEGIN{OFS=FS="\t"}{if($0~/>/) {name=$0; sub(">", "", name);} else seq[name]=seq[name]$0;}END{print ">SOX2"; print seq["SOX2"]}‘ test.fasta >SOX2 ACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGACTGTCACGAGGGACGCATCGGACGACTGCAGGAC
标签:换行 产生 rto 工具 文本处理工具 agg log 包含 数字
原文地址:http://www.cnblogs.com/freescience/p/7436459.html