鉴于文件内容如下:
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
调整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
的副本)[:space:]
替换为单个空格(
)