Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Unix cut/awk:多次打印同一列(例如1000次)_Linux_Unix_Awk_Cut - Fatal编程技术网

Linux Unix cut/awk:多次打印同一列(例如1000次)

Linux Unix cut/awk:多次打印同一列(例如1000次),linux,unix,awk,cut,Linux,Unix,Awk,Cut,如何将一列复制多次 e、 g 输入 输出 1 4771131 4772199 ENSMUSG00000103922 0 + 0.670011 0.670011 x 998 times 1 4773206 4785739 ENSMUSG00000033845 0 - 95.0352 95.0352 x 998 times 1 4778063 4779212 ENSMUSG00000102275 0 - 0.1806 0.1806 x 998 tim

如何将一列复制多次

e、 g

输入

输出

1   4771131 4772199 ENSMUSG00000103922  0   +   0.670011    0.670011 x 998 times
1   4773206 4785739 ENSMUSG00000033845  0   -   95.0352 95.0352 x 998 times
1   4778063 4779212 ENSMUSG00000102275  0   -   0.1806  0.1806 x 998 times
1   4807788 4848410 ENSMUSG00000025903  0   +   110.078 110.078 x 998 times

谢谢

使用“简单for循环”并打印行,您希望执行多少次:

awk '{printf $0;for(i=1;i<=998;i++){printf("%s%s",$NF,i==998?"":" ")};print ""}' Input_file

awk'{printf$0;对于(i=1;i使用
awk
,根据需要更改变量
n=

一行:

 awk -v col=1 -v n=2 'function repeat(v, n,i){for(i=1; i<=n; i++)printf("%s%s",(i==1?"":OFS),v)}{for(i=1; i<=NF; i++)printf("%s%s",(i==col?repeat($i,n):$i),i==NF?RS:OFS)}' infile
$ cat infile
1   4771131 4772199 ENSMUSG00000103922  0   +   0.670011
1   4773206 4785739 ENSMUSG00000033845  0   -   95.0352
1   4778063 4779212 ENSMUSG00000102275  0   -   0.1806
1   4807788 4848410 ENSMUSG00000025903  0   +   110.078
awk -v col=7 -v n=5 '
                     function repeat(v, n,i)
                     {
                       for(i=1; i<=n; i++)
                            printf("%s%s",(i==1?"":OFS),v)
                     }
                     {
                       for(i=1; i<=NF; i++)
                         printf("%s%s",(i==col?repeat($i,n):$i),i==NF?RS:OFS)
                     }
                   ' infile
col=7和v=5时

可读性更好:

 awk -v col=1 -v n=2 'function repeat(v, n,i){for(i=1; i<=n; i++)printf("%s%s",(i==1?"":OFS),v)}{for(i=1; i<=NF; i++)printf("%s%s",(i==col?repeat($i,n):$i),i==NF?RS:OFS)}' infile
$ cat infile
1   4771131 4772199 ENSMUSG00000103922  0   +   0.670011
1   4773206 4785739 ENSMUSG00000033845  0   -   95.0352
1   4778063 4779212 ENSMUSG00000102275  0   -   0.1806
1   4807788 4848410 ENSMUSG00000025903  0   +   110.078
awk -v col=7 -v n=5 '
                     function repeat(v, n,i)
                     {
                       for(i=1; i<=n; i++)
                            printf("%s%s",(i==1?"":OFS),v)
                     }
                     {
                       for(i=1; i<=NF; i++)
                         printf("%s%s",(i==col?repeat($i,n):$i),i==NF?RS:OFS)
                     }
                   ' infile
awk-v col=7-v n=5'
功能重复(v,n,i)
{

对于(i=1;iAwk解决方案(使用单个
打印
操作):


awk中,通过格式化字符串的强大功能,它变得非常容易

例如

$ awk -v count=3 '{s=sprintf("%0*s",count,""); gsub(/ /," "$NF,s); printf $0 s "\n"}' file
1   4771131 4772199 ENSMUSG00000103922  0   +   0.670011 0.670011 0.670011 0.670011
1   4773206 4785739 ENSMUSG00000033845  0   -   95.0352 95.0352 95.0352 95.0352
1   4778063 4779212 ENSMUSG00000102275  0   -   0.1806 0.1806 0.1806 0.1806
1   4807788 4848410 ENSMUSG00000025903  0   +   110.078 110.078 110.078 110.078

您可以将其修改为
count=999
,以获得所需的输出。

欢迎使用堆栈溢出,所以您希望将最后一列打印998次或将其相乘998次?到目前为止,我的答案是只打印最后一列998次。只是好奇-为什么要编写
n=998;而(--n)foo
而不是
(n=1;n@AkshayHegde:谢谢。为了纠正您的错误,我们不需要
gsub(/./,“$NF,s)
,因为它将替换我们不需要的每个字符。我们只想替换
格式说明符
。要验证它,您可以在格式化字符串中附加一个字符串,比如
s=s“hello”
现在
gsub(/./,“$NF,s)
这将替换每个字符,包括
h
e
l
l
o
,但是如果使用
gsub(/,“$NF,s)
它将只替换
hello
之前的说明符。在本例中,这可能会起作用,因为字符串中只有说明符,但这不是我想要的。
$ awk -v count=3 '{s=sprintf("%0*s",count,""); gsub(/ /," "$NF,s); printf $0 s "\n"}' file
1   4771131 4772199 ENSMUSG00000103922  0   +   0.670011 0.670011 0.670011 0.670011
1   4773206 4785739 ENSMUSG00000033845  0   -   95.0352 95.0352 95.0352 95.0352
1   4778063 4779212 ENSMUSG00000102275  0   -   0.1806 0.1806 0.1806 0.1806
1   4807788 4848410 ENSMUSG00000025903  0   +   110.078 110.078 110.078 110.078