复制文件中的所有列

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

我试图复制我的文件中的所有列。我的文件非常大,包括600,000列和300行 - 制表符分隔。在这里,我只是展示了我正在尝试工作的文件的一小部分。

rs      71_1203 71_1299 71_6634
40896   3       3       4
70786   2       2       4
116950  2       2       4
5891    3       3       4
6254    3       2       4
89308   2       2       4
116953  2       2       4
116956  2       2       4
20709   3       2       4
12524   2       2       4
12603   2       2       4
21074   2       2       1
42672   2       2       4
40972   2       2       4
21727   3       2       4
22163   2       2       4
22417   2       2       4
41216   2       2       4
41374   2       2       4

现在我希望我的文件看起来像这样:

rs      rs      71_1203 71_1203 71_1299 71_1299 71_6634 71_6634
40896   40896   3       3       3       3       4       4
70786   70786   2       2       2       2       4       4
116950  116950  2       2       2       2       4       4
5891    5891    3       3       3       3       4       4
6254    6254    3       3       2       2       4       4
89308   89308   2       2       2       2       4       4
116953  116953  2       2       2       2       4       4
116956  116956  2       2       2       2       4       4
20709   20709   3       3       2       2       4       4
12524   12524   2       2       2       2       4       4
12603   12603   2       2       2       2       4       4
21074   21074   2       2       2       2       1       1
42672   42672   2       2       2       2       4       4
40972   40972   2       2       2       2       4       4
21727   21727   3       3       2       2       4       4
22163   22163   2       2       2       2       4       4
22417   22417   2       2       2       2       4       4
41216   41216   2       2       2       2       4       4
41374   41374   2       2       2       2       4       4

所有列都重复。我用awk命令做到了这一点 -

awk 'BEGIN{FS=OFS="\t"} {$1 = $1 OFS $1} 1' try.txt | 
awk 'BEGIN{FS=OFS="\t"} {$3 = $3 OFS $3} 1' |
awk 'BEGIN{FS=OFS="\t"} {$5 = $5 OFS $5} 1' | 
awk 'BEGIN{FS=OFS="\t"} {$7 = $7 OFS $7} 1'

我知道这个命令在我们的小文件时很好但是我用我的文件有600,000列这种方式肯定不会起作用。

有人可以帮助我,我怎么能这样做是一个简单的方法?

非常感谢您的帮助

提问于
用户回答回答于

Python方法:

with open('input.txt') as f:
    text = f.readlines()
    duplicated_text = ['\t'.join([word + '\t' + word for word in line.split('\t')]) for line in text]

with open('output.txt', 'w') as f:
    f.write('\n'.join(duplicated_text))
用户回答回答于

使用awk:

$ awk -v OFS="\t" '{
    for(i=NF*2;i>1;i--)                                        # from NF*2 down to 2
        $i=((j=i/2)==int(j)?$j:$(++j))                         # $i=$(ceil(1/2))
}1' file

输出:

rs      rs      71_1203 71_1203 71_1299 71_1299 71_6634 71_6634
40896   40896   3       3       3       3       4       4
70786   70786   2       2       2       2       4       4
...

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • 旺仔小小鹿

    社区 · 运营 (已认证)

    46 粉丝0 提问2 回答
  • 拉布拉多拉不多

    1 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券