bash: 用于过滤具有指定字符数的行的别名

bash: aliasing for filtering lines with specified character count

我想在 bash CLI 上过滤具有用户提供的字符数的行。

虽然这可以通过 awk 完成(例如,| awk -F+ 'NF==7'),但我想给它加上别名(比如 cfreq),以便我可以按如下方式使用它:

$ cat foo | awk ' > 10' | cfreq 7 | wc

虽然命令可以通过一些简单的东西生成,例如 printf(例如,printf "awk -F+ NF==%s\n" 7),但我无法通过 .bashrc 文件将它变成我可以跨多个系统使用的别名.任何帮助将不胜感激。

PS:虽然上述要求假设字符 + 是参考字符,但如果我也能概括它,它可能会更好。例如:

$ cat foo | awk ' > 10' | cfreq + 7 | wc

我不确定对别名的期望是否过高,尽管在某些情况下我已经能够为类似的任务设置别名。

使用函数代替别名:

cfreq() { local n=""; shift; awk -F'+' -v n="$n" 'NF==n' "${@:--}"; }

例如:

$ { printf '%s+' {1..8}; echo 9; } | cfreq 9
1+2+3+4+5+6+7+8+9

$ { printf '%s+' {1..8}; echo 9; } | cfreq 7
$

$ { printf '%s+' {1..8}; echo 9; } > file
$ cfreq 9 file
1+2+3+4+5+6+7+8+9

根据@EdMorton 的回答,我现在可以得到我需要的东西了。

.bashrc 中添加了 cfreq()。然后它工作得很好!

$ cat test.txt
abc
abc + def
abc + def + ghi
abc + def + ghi
abc + ghi
$ cat test.txt | cfreq 2
abc + def
abc + ghi
$