首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >剪切列并附加到同一文件

剪切列并附加到同一文件
EN

Stack Overflow用户
提问于 2019-12-17 22:36:45
回答 2查看 546关注 0票数 0

我正在MacOS上处理一个选项卡分隔的文件。该文件包含15列和数千行。我希望剪切列1、2和3,然后将它们附加到第11、12和13列。我希望在管道中这样做,这样就不需要创建额外的文件了。我找到的唯一一篇文章使用了命令sponge,但我显然在MacOS上没有它,或者它不在我的BASH中。

输入tsv文件实际上是在同一行代码中生成的,

arbitrary command to generate input.tsv | cut -f1-3,11-13 | <Step to cut -f4-6 and append -f1-3> | sort > out.file

输入tsv

代码语言:javascript
复制
chr1    21018   21101   A   B   C   D   E   F   G   chr1    20752   21209
chr10   74645   74836   A   B   C   D   E   F   G   chr10   74638   74898
chr10   75267   75545   A   B   C   D   E   F   G   chr10   75280   75917
chr4    212478  212556  A   B   C   D   E   F   G   chr4    212491  213285

期望输出tsv

代码语言:javascript
复制
chr1    21018   21101
chr1    20752   21209
chr10   74638   74898
chr10   74645   74836
chr10   75280   75917
chr4    212478  212556
chr4    212491  213285
EN

回答 2

Stack Overflow用户

发布于 2019-12-17 22:44:33

使用珀尔awk

代码

代码语言:javascript
复制
perl -pe 's/chr[0-9]+/\n$&/g' file | awk '/./{print $1, $2, $3}'

成品率输出

代码语言:javascript
复制
chr1 21018 21101
chr1 20752 21209
chr10 74645 74836
chr10 74638 74898
chr10 75267 75545
chr10 75280 75917
chr4 212478 212556
chr4 212491 213285
票数 0
EN

Stack Overflow用户

发布于 2019-12-20 19:04:53

下面是简短的awk解决方案:

代码语言:javascript
复制
awk '{print $1, $2, $3, "\n" $1, $12, $13;}' input.tsv

产出:

代码语言:javascript
复制
chr1 21018 21101 
chr1 20752 21209
chr10 74645 74836 
chr10 74638 74898
chr10 75267 75545 
chr10 75280 75917
chr4 212478 212556 
chr4 212491 213285

解释

代码语言:javascript
复制
{ # for each input line
    print $1, $2, $3; # print 1st field, append 2nd and 3rd fields. Terminate with new line
    print $1, $12, $13; #print 1st field, append 12th and 13th field. Terminate with new line
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59383092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档