如何使用gawk在vim中按长度对一系列行进行排序?

时间:2016-06-30 23:19:53

标签: vim awk gawk viml

简短的问题我使用这个正则表达式https://stackoverflow.com/a/11531819/4779063来按照vim中的长度对行进行排序,但是我对它进行了一些修改以使其适用于windows和gawk所以我最终得到了一些东西像这样:

  vmap <Leader>su ! gawk -f "{ print length(), $0 \| \"sort -n \| cut -d\\  -f2-\"}"<CR>

但是每当我尝试使用它时它会说它可以在我的C:\ Users \ Username \ AppData \ Local \ Temp \ VIi33.tmp

中打开一个.tmp文件

任何想法?

2 个答案:

答案 0 :(得分:0)

如果您愿意,可以尝试仅使用vim 按长度对文件进行排序:

:g/^/ s/^.*$/\=substitute(submatch(0),submatch(0),strlen(submatch(0)).'# '.submatch(0),'')/ 
:% sort! n
:% s/^\d\+# //

答案 1 :(得分:0)

此AWK程序根据长度对记录或行(通过数组)进行排序,并按排序顺序打印出来。你能用吗?

function len_comp_func(i1,v1,i2,v2) {   # define length comparison function for for
  return(length(v1)-length(v2))
}
{
  arr[NR]=$0                            # populate array with all the records
}
END {
  PROCINFO["sorted_in"] = "comp_func"   # define order function
  for (i in arr)                        # traverse in length order
    print arr[i]
}