我有大约100个文件,其语法如下
ahfsdjfhdfhj_EPI_34_fdsafasdf
asdfasdf_EPI_2_fdsf
hfdjh_EPI_8_dhfffffffffff
ffffffffffasdfsdf_EPI_1_fyyy44
...
总有EPI_NUMBER。我该如何按这个数字排序?
答案 0 :(得分:10)
在您的示例中,分隔符_
的分隔符显示为EPI_nnn
,文本_
在分隔符sort -n -t "_" -k 3 file.txt
后位于相同的位置。如果总是如此,那么您可以使用以下命令对文件进行排序:
EPI_
<强>更新强>
如果sed 's/^\(.*EPI_\)\(.*\)$/\2##\1/' file.txt | sort -n -t "_" -k1 | sed 's/^\(.*\)##\(.*\)$/\2\1/'
文本的位置不是已修复,请使用以下shell命令:
{{1}}
答案 1 :(得分:4)
如果Perl没问题,你可以:
print sort foo <>;
sub foo {
($x = $a) =~s/.*EPI_(\d+).*/$1/;
($y = $b) =~s/.*EPI_(\d+).*/$1/;
return $x <=> $y;
}
并将其用作:
perl prg.pl inputfile
答案 2 :(得分:2)
sed -e 's/EPI_/EPI /' file1 file2 ...|sort -n -k 2 -t ' '
将其传送到sed -e 's/ /_/'
以取回原始表单。
答案 3 :(得分:1)
这可能对您有用:
ls | sed 's/.*EPI_\([0-9]*\)/\1 &/' | sort -n | sed 's/\S* //'