Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 获取前N个字符并对其进行排序_Bash_Shell_Sorting_Cut_Perl - Fatal编程技术网

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)