根据不包括空格的字符数对 bash 中的输出进行排序,但保留输出中的空格

问题描述 投票:0回答:1

鉴于文件内容如下:

a b c 
abcde
ab cd ef
abcdefg
a
a b

我想根据非空格字符的数量重新排列输出,但在给出输出时保留空格。此外,我需要这是一个单个命令,而不是我放入脚本中的命令。

我尝试的几乎所有事情都以这样的方式结束:

cat file.txt |awk '{ count=gsub(/ /,""); print length($0), $0 }' | sort
1 a
2 ab
3 abc
5 abcde
6 abcdef
7 abcdefg

这确实给了我正确的计数和排序,但它也从原始输出中删除了空格,这是我不想要的。期望的输出是

1 a 
2 a b
3 a b c 
5 abcde
6 ab cd ef
7 abcdefg
bash awk
1个回答
0
投票

调整OP当前的

awk
代码以使用
gsub()
来计算非空白字符的数量:

$ awk '{ x=$0; print gsub(/[^[:space:]]/,"",x), $0 }' file.txt | sort
1 a
2 a b
3 a b c
5 abcde
6 ab cd ef
7 abcdefg

地点:

  • x=$0
    - 复制当前行,以便我们可以...
  • gsub(...,x)
    - 针对
    gsub()
    运行
    x
    $0
    的副本)
  • 注意 - 这也会忽略选项卡;如果OP想要计数选项卡,则将
    [:space:]
    替换为单个空格(
     
© www.soinside.com 2019 - 2024. All rights reserved.