我在名为.csv
的目录中有多个mydirectory
个文件。我想首先使用一些bash / awk / sed命令对所有这些文件进行排序,首先基于LeftChr
列,然后是RightChr
列,然后获取result
。
>Id LeftChr LeftPosition LeftStrand LeftLength RightChr RightPosition RightStrand
1979 chr1 825881 - 252 chr2 5726723 -
5480 chr2 826313 + 444 chr2 5727501 +
5492 chr5 869527 + 698 chr2 870339 +
1980 chr2 1584550 - 263 chr1 1651034 -
5491 chr14 1685863 + 148 chr1 1686679 +
5490 chr1 1691382 + 190 chr1 1693020 +
结果
>Id LeftChr LeftPosition LeftStrand LeftLength RightChr RightPosition RightStrand
5490 chr1 1691382 + 190 chr1 1693020 +
1979 chr1 825881 - 252 chr2 5726723 -
1980 chr2 1584550 - 263 chr1 1651034 -
5480 chr2 826313 + 444 chr2 5727501 +
5492 chr5 869527 + 698 chr2 870339 +
5491 chr14 1685863 + 148 chr1 1686679 +
答案 0 :(得分:1)
这可能适合你(GNU sed and sort):
sed '1b;/Id/d;s/chr//g' mydirectory/*.csv |
sort -k2,2n -k6,6n |
sed '1b;s/\S\+/chr&/2;s/\S\+/chr&/6' > outputFile
这会丢弃除第一个标头之外的所有标头,并从所有文件中删除文字chr
。随后的文件通过管道输入到第二和第六个字段以数字方式对文件进行排序。这个转换通过管道传输到最终的sed命令,该命令忽略第一行(标题行)并替换第二和第六个字段中的文字chr
。
答案 1 :(得分:1)
(function () {
'use strict';
angular
.module('com.module.users')
.controller('UserCtrl', UserCtrl);
UserCtrl.$inject = ['$state', '$rootScope', 'ENV', 'DTOptionsBuilder', 'DTColumnBuilder'];
function UserCtrl($state, $rootScope, ENV, DTOptionsBuilder, DTColumnBuilder) {
var vm = this;
vm.currentPageState = $state.current.stateDesc;
vm.dtOptions = DTOptionsBuilder.newOptions()
.withOption('ajax', {
url: ENV.apiUrl + vm.currentPageState.rUrl + '/users',
type: 'POST',
headers: {
Authorization: 'Bearer ' + $rootScope.globals.currentAdmin.token
}
})
.withDataProp('data')
.withOption('processing', true)
.withOption('serverSide', true)
.withPaginationType('full_numbers')
.withBootstrap()
.withColumnFilter({
aoColumns: [{
type: 'text',
bRegex: true,
bSmart: true
}, {
type: 'text',
bRegex: true,
bSmart: true
}, {
type: 'text',
bRegex: true,
bSmart: true
}, {
type: 'text',
bRegex: true,
bSmart: true
}]
});
vm.dtColumns = [
DTColumnBuilder.newColumn('firstName').withTitle('First name'),
DTColumnBuilder.newColumn('lastName').withTitle('Last name'),
DTColumnBuilder.newColumn('email').withTitle('Email ID'),
DTColumnBuilder.newColumn('phone').withTitle('Phone Number')
];
}
})();
是啊,这种模式不会成为
答案 2 :(得分:0)
假设您可以访问合理的计算环境,以下内容应为您尝试执行的操作提供基础:
in=input.txt; head -n 1 "$in"; tail -n +2 "$in" | sort -k2,2 -k6,6
但是有几个潜在的问题。一个是您发布的输入文件不是通常意义上的“CSV”文件。另一个是你是否想要“稳定排序”。
答案 3 :(得分:0)
将其加载到r
result <- yourdataname[order(,yourdataname[,LeftChr], yourdataname[,RightChr])]
如果您在数据集中有NA:
result <- yourdataname[order(yourdataname[,"LeftChr"],yourdataname[,"RightChr"], na.last = NA),]
答案 4 :(得分:0)
上述答案都不适用于我,但能够通过这样的方式完成。
for x in *.csv; do
grep -v "^>" *.csv | sort -k2,2V -k6,6V -k3,3n -t $','<"$x" >"$x.tmp"
mv "$x.tmp" "$x"
done