![](/img/trans.png)
[英]In MacOS terminal, is it possible to go back to the previous directory (Multiple times). (e.g. like cd - but going back multiple times)
[英]Unix cut/ awk: Print same column multiple times (e.g. 1000 times)
如何多次復制列?
例如
輸入
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
產量
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
,根據需要更改變量n=<your_interest>
值。
一內膽:
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
當
col=7 and v=5
$ 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
1 4771131 4772199 ENSMUSG00000103922 0 + 0.670011 0.670011 0.670011 0.670011 0.670011
1 4773206 4785739 ENSMUSG00000033845 0 - 95.0352 95.0352 95.0352 95.0352 95.0352
1 4778063 4779212 ENSMUSG00000102275 0 - 0.1806 0.1806 0.1806 0.1806 0.1806
1 4807788 4848410 ENSMUSG00000025903 0 + 110.078 110.078 110.078 110.078 110.078
假設您設置的第一
col=1
,則
$ awk -v col=1 -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
1 1 1 1 1 4771131 4772199 ENSMUSG00000103922 0 + 0.670011
1 1 1 1 1 4773206 4785739 ENSMUSG00000033845 0 - 95.0352
1 1 1 1 1 4778063 4779212 ENSMUSG00000102275 0 - 0.1806
1 1 1 1 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解決方案(單次print
操作):
awk '{ n=998;r=$NF; while(--n) r=r FS $NF; print $0,r}' OFS='\t' file
利用格式化字符串的強大功能, 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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.