我试图根据表中几行中的列值多次打印字符“ N”
例如,此表的输出:
AATTGGCC A 1.7 4
CCGGTTAA T 0.8 3
AAGGTTCC G 2.4 7
理想情况下会返回:
NNNN
NNN
NNNNNNN
基于第4列中的值。
当前,我一直在使用:
while read line
do
a=$4
printf "$0.sN\n" {a}
done < table.txt
但是这只会返回三个'N',每个在换行符上。 理想情况下,我还要在输出的每一行末尾打印第2列中的字母。
有人可以帮助我吗?
答案 0 :(得分:4)
使用bash:
while read x x x end; do
for ((i=0; i<$end; i++)); do
echo -n "N"
done
echo
done < file
输出:
NNNN NNN NNNNNNN
答案 1 :(得分:3)
以您提供的示例为基础,我将其更改为:
while read line
do
a=$(echo ${line} | awk '{print $4}')
printf "N%.0s" $(seq $a)
echo
done < table.txt
我不清楚您如何从原始解决方案中获得3 N(我无法复制),但是也许我们有不同的配置。我上面发布的解决方案基于BASH。在while循环中,第一行代码
a=$(echo ${line} | awk '{print $4}')
回声一行,然后将其通过管道传递到awk语句中,该语句仅查看第四列并将其保存到名为“ a”的变量中。 $(...)
符号只是意味着将括号内的语句作为BASH命令(在这种情况下,将echo
传递到awk
命令中)进行评估。在第二行,
printf "N%.0s" $(seq $a)
我通过printf
命令打印出$ Ns。 $(...)
再次简单地运行BASH命令,在这种情况下,它是seq
命令,用于打印$ a字符。使用此脚本,我可以为您的示例table.txt文件获得以下结果:
NNNN
NNN
NNNNNNN