Bash 获取前N个字符并对其进行排序
我需要从文件的每一行提取前四个字符并对它们进行排序 我在下面试过。但这并不是对每一行进行排序Bash 获取前N个字符并对其进行排序,bash,shell,sorting,cut,perl,Bash,Shell,Sorting,Cut,Perl,我需要从文件的每一行提取前四个字符并对它们进行排序 我在下面试过。但这并不是对每一行进行排序 cut -c1-4 simple_file.txt | sort -n O/p使用上述内容: appl bana uoia alpp aabn aiou 预期输出: appl bana uoia alpp aabn aiou 尝试定义两个辅助函数: explodeword () { test -z "$1" && return echo ${1:
cut -c1-4 simple_file.txt | sort -n
O/p使用上述内容:
appl
bana
uoia
alpp
aabn
aiou
预期输出:
appl
bana
uoia
alpp
aabn
aiou
尝试定义两个辅助函数:
explodeword () {
test -z "$1" && return
echo ${1:0:1}
explodeword ${1:1}
}
sortword () {
echo $(explodeword $1 | sort) | tr -d ' '
}
然后
我会做你想做的 尝试定义两个助手函数:
explodeword () {
test -z "$1" && return
echo ${1:0:1}
explodeword ${1:1}
}
sortword () {
echo $(explodeword $1 | sort) | tr -d ' '
}
然后
我会做你想做的
sort
在这种情况下不是适合作业的工具,因为它用于对输入行进行排序,而不是对每行中的字符进行排序
我知道你没有在问题上加上标签,但有一种方法可以做到:
perl -F'' -lane 'print(join "", sort @F[0..3])' file
这将使用
-a
开关自动拆分-F
指定的分隔符上的每一行输入(在本例中为空字符串,因此每个字符都是数组@F
中自己的元素)。然后使用标准字符串比较顺序对数组的前4个字符进行排序。结果在一个空字符串上连接在一起。sort
在这种情况下不是作业的正确工具,因为它用于对输入行进行排序,而不是对每行中的字符进行排序
我知道你没有在问题上加上标签,但有一种方法可以做到:
perl -F'' -lane 'print(join "", sort @F[0..3])' file
这将使用
-a
开关自动拆分-F
指定的分隔符上的每一行输入(在本例中为空字符串,因此每个字符都是数组@F
中自己的元素)。然后使用标准字符串比较顺序对数组的前4个字符进行排序。结果在一个空字符串中连接在一起。sort命令用于逐行对文件进行排序,而不是设计用于对一行内容进行排序。让sort做您想做的事情并非不可能,但它会有点混乱,而且可能效率低下
我可能会在Python中这样做,但由于您可能没有Python,这里有一个简短的awk命令,它可以满足您的需要
awk'{split(substr($0,1,4),a,”);n=asort(a);s=“”;for(i=1;i使用sort
命令逐行对文件进行排序,它不是为对行的内容进行排序而设计的。要使排序实现您想要的功能并非不可能,但它会有点混乱,可能效率低下
我可能会在Python中这样做,但由于您可能没有Python,这里有一个简短的awk命令,它可以满足您的需要
awk'{split(substr($0,1,4),a,“””;n=asort(a);s=“”;for(i=1;我在simple_file.txt中是什么?simple_file.txt中是什么?我正在考虑走这条路-值得一提的是,asort
是GNU awk的一个功能。@TomFenech:哦,是这样的。希望泡泡在GNU系统上。:)FWIW,perl
从简洁和优雅的角度看,它似乎是这项任务的赢家。你的代码肯定比我在Python中所能想到的任何东西都要小。我正在考虑走这条路-值得一提的是,asort
是GNU awk的一个特性。@TomFenech:哦,是的。希望气泡正在出现GNU系统。:)FWIW,perl
从简洁和优雅的角度看,它似乎是这项任务的赢家。您的代码肯定比我在Python中能想到的任何东西都要小。另一种perl方式,但类似于perl-lpe'$\=join',sort split//,substr($\$0,4)
另一种perl方式,但类似于perl-lpe'$\=join“”,排序拆分//,子字符串($,0,4)