我正在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
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
chr1 21018 21101
chr1 20752 21209
chr10 74638 74898
chr10 74645 74836
chr10 75280 75917
chr4 212478 212556
chr4 212491 213285发布于 2019-12-17 22:44:33
使用珀尔和awk:
代码
perl -pe 's/chr[0-9]+/\n$&/g' file | awk '/./{print $1, $2, $3}'成品率输出
chr1 21018 21101
chr1 20752 21209
chr10 74645 74836
chr10 74638 74898
chr10 75267 75545
chr10 75280 75917
chr4 212478 212556
chr4 212491 213285发布于 2019-12-20 19:04:53
下面是简短的awk解决方案:
awk '{print $1, $2, $3, "\n" $1, $12, $13;}' input.tsv产出:
chr1 21018 21101
chr1 20752 21209
chr10 74645 74836
chr10 74638 74898
chr10 75267 75545
chr10 75280 75917
chr4 212478 212556
chr4 212491 213285解释
{ # 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
}https://stackoverflow.com/questions/59383092
复制相似问题