【发布时间】:2016-01-14 06:08:51
【问题描述】:
我想重新排序整个文件。
file.txt 看起来像这样:
1 10 1 10 2 10 1 11 2 11 2 10我希望它看起来像这样:
1 10 1 10 1 11 2 10 2 11 2 10【问题讨论】:
-
为什么不在 bash 中使用
sort命令?
标签: perl awk text-processing
我想重新排序整个文件。
file.txt 看起来像这样:
1 10 1 10 2 10 1 11 2 11 2 10我希望它看起来像这样:
1 10 1 10 1 11 2 10 2 11 2 10【问题讨论】:
sort 命令?
标签: perl awk text-processing
这将保持每个分组中行的顺序:
perl -ane '
push @{$lines{$F[0]}}, $_;
} {
print join "", map {join "", @{$lines{$_}}} sort keys %lines;
' <<END
1 a
2 a
1 b
1 a
2 c
2 b
END
1 a
1 b
1 a
2 a
2 c
2 b
【讨论】:
为此最好使用sort 命令
sort -k1n -s file.txt
使用Gnu-awk 4、Controlling Scanning的另一种解决方案
gawk '
{d[$1][length(d[$1])+1]=$0}
END{
PROCINFO["sorted_in"] = "@val_num_asc";
for(key in d){
for(i=1; i<=length(d[key]); ++i) {
print d[key][i]
}
}
}' file.txt
你明白了,
1 10 1 10 1 11 2 10 2 11 2 10【讨论】:
sort -k1,2 file.txt
生产
1 10
1 10
1 11
2 10
2 10
2 11
【讨论】:
sort -k1n -s file.txt
1条目,然后是所有2条目,按照它们现在的顺序接下来...