我有以下Python脚本,我用长给行排序:如何使用awk按行数排序行?
import fileinput
print "".join(sorted(fileinput.input(), key=len))
我怎样写在awk中相同的脚本?
我有以下Python脚本,我用长给行排序:如何使用awk按行数排序行?
import fileinput
print "".join(sorted(fileinput.input(), key=len))
我怎样写在awk中相同的脚本?
一对夫妇使用awk
和sort
的解决方案:
# keep spaces
awk 'OFS = "\t" { print length, $0 }' file | sort -g | cut -f2-
# stripping out spaces from line before counting
awk 'OFS = "\t" { gsub (" ", "", $0); print length, $0 }' file | sort -g | cut -f2-
用awk与排序比下面的解决方案,但是它只能使用GNU AWK几乎肯定会更好,并说明了如何使用一个用户的定义比较:
gawk '
function clength(i1, v1, i2, v2) { return length(v1) - length(v2); }
{a[++i] = $0;}
END { asort(a, aclone, "clength");
for (i=1;i<=length(a);i++) { print aclone[i] }
}'
利用GNU AWK(由于功能asorti
):
awk '{O[NR]=$0;L[length*1000+NR]=NR}END{asorti(L,S);for(s in S)print O[L[S[s]]]}' fileinput
1000
到数行数的更高)sort
是一个更好的选择即使它创建了一个新的分叉子shell,也是如此。我拿@fedorqui的建议在阵列中使用的NR为指标,而不是专用的可变
好的!请注意,您也可以依靠行号并说'O [NR] = $ 0'。 – fedorqui
对,还好,我修改了帖子 – NeronLeVelu
你想要一个纯粹的'awk'的解决方案,或者是一个班轮在* NIX命令使用最终目标是什么? “awk”的大多数用法往往是单行使用面向行的输入和输出,这种排序违反了; 'awk'可以进行排序,但大部分时间你可以让'sort'工具完成工作,然后用'awk'处理结果。还有,awk的味道? ['gawk'提供'asort'](https://www.gnu.org/software/gawk/manual/html_node/Array-Sorting-Functions.html#Array-Sorting-Functions),但根据这些文档,功能不规范;其他版本需要从头开始编写排序。 – ShadowRanger
@ShadowRanger哇我没有想到所有的错综复杂。有一个单线但不是必需的,这将是很好的。 – Ana