不带分隔符的列上的unix排序
我想根据特定列使用Unix脚本对文件内容进行排序: 例如:在第3列对以下文件进行排序:不带分隔符的列上的unix排序,unix,sorting,Unix,Sorting,我想根据特定列使用Unix脚本对文件内容进行排序: 例如:在第3列对以下文件进行排序: ax5aa aa3ya fg7ds pp0dd aa1bb 将导致 pp0dd aa1bb aa3ya ax5aa fg7ds 我尝试了sort-k3,3,但它只是在单词的3d组上排序(separator=SPACE) 有没有办法让unix排序按我喜欢的方式进行,或者我应该使用其他工具?在排序之前使用sed创建列 $ echo "ax5aa aa3ya fg7ds pp0dd aa1bb"
ax5aa
aa3ya
fg7ds
pp0dd
aa1bb
将导致
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds
我尝试了sort-k3,3,但它只是在单词的3d组上排序(separator=SPACE)
有没有办法让unix排序按我喜欢的方式进行,或者我应该使用其他工具?在排序之前使用sed创建列
$ echo "ax5aa
aa3ya
fg7ds
pp0dd
aa1bb" | sed 's/\(.\)/\1 /g' | sort -t ' ' -k3,3 | tr -d ' '
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds
我将直接使用perl并定义一个比较器
echo $content | perl -e 'print sort {substr($a,3,1) cmp substr($b,3,1)} <>;'
echo$content | perl-e'打印排序{substr($a,3,1)cmp substr($b,3,1)};'
分类的手册页:
[……]
-k、 --key=POS1[,POS2]
在POS1(原点1)处开始关键点,在POS2处结束关键点(默认的行尾)
[……]
POS是F[.C][OPTS],其中F是字段编号,C是字段中的字符位置;两者都是原点1。如果-t和-b都无效,则字段中的字符从前面空白的开头开始计数。OPTS是一个或多个单字母排序选项,它覆盖该键的全局排序选项。如果未指定键,则使用整行作为键
使用--key=1.3,1.3,您说只有一个字段(整行),并且您正在比较该字段的第三个字符位置。我会这样做:
echo-e'abc\nxyz\ncde'| perl-npe's/(.)/$1/g'| sort-k3,3 | perl-npe's//g'
echo $content | perl -e 'print sort {substr($a,3,1) cmp substr($b,3,1)} <>;'
$ sort --key=1.3,1.3 inputfile
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds