根据列值打印字符n次

3
我尝试根据表格中多行某一列的值来多次打印字符“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个回答

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

3

以你给出的例子为基础,我会将其改为以下内容:

while read line
do
    a=$(echo ${line} | awk '{print $4}')
    printf "N%.0s" $(seq $a)
    echo
done < table.txt

我不清楚您是如何从原来的解决方案中获得三个N的,因为我无法重现,但也许我们的配置不同。我上面发布的解决方案基于BASH。在 while 循环内,第一行代码:

    a=$(echo ${line} | awk '{print $4}')

该命令输出一行并将其导入到一个awk语句中,该语句仅查看第四列并将其保存到名为“a”的变量中。符号$(...)的意思是将括号内的语句作为BASH命令进行评估(在本例中为echo管道输入到awk命令中)。在第二行中,

    printf "N%.0s" $(seq $a)

我通过printf命令打印出$ a个N的数量。再次强调, $(...)只是运行BASH命令的简单方式,这种情况下使用seq命令来打印$a个字符。将此脚本与您的示例table.txt文件一起使用,即可获得以下结果:

NNNN
NNN
NNNNNNN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接