我有一个文件,其中包含结构条目
a1;b1;c1;
d1;e1;f1;g1
a2;b2;c2;
d2;e2;f2;g2
ETC。
我想通过 g 对该文件进行排序,但保留 abc 与相应的 g。有什么好的方法可以通过命令行执行此操作吗?我现在能想到的就是编写一个或多或少复杂的 perl 脚本。
答案1
如果您的行保证成对出现,第一行有 3 个字段,第二行有 4 个字段(并且第二行包含“g”值):
$ sed -n 'N;s/\n//;p' your_file \
| sort -t';' -k7 \
| perl -F';' -ane '$,=";";print @F[0..2],"\n";print @F[3..$#F]'
该sed
部分将每两个连续行连接在一起,sort
对第七个字段上的输入进行排序;
,最后将perl
每行分成 2 部分:一个包含三个字段,一个包含四个字段。
答案2
假设数据结构相同,您可以使用 GNU sed 和 GNU awk 来完成此操作,例如:
# Separate records by an extra new-line
sed '2~2G' infile |
# Read records and use GNU awk's built-in sort on field 7
awk '
BEGIN { PROCINFO["sorted_in"] = "@ind_str_desc" }
{ h[$7] = $0 }
END { for(k in h) print h[k] }
' RS= FS='[;\n]+'
输出:
a2;b2;c2;
d2;e2;f2;g2
a1;b1;c1;
d1;e1;f1;g1