抑制 `wc -l` 输出中的摘要信息

ido*_*pme 3 linux bash shell wc

wc -l在我的文本文件中使用命令计数行数(我也想通过管道对所有内容进行排序),如下所示:

wc -l $directory-path/*.txt | sort -rn
Run Code Online (Sandbox Code Playgroud)

输出包括“total”行,它是所有文件的行的总和:

10 total
5 ./directory/1.txt
3 ./directory/2.txt
2 ./directory/3.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法抑制这个汇总行?或者更好的是,改变摘要行的措辞方式?例如,用“行”代替“10”,用“文件”代替“总计”。

F. *_*uri 5

还是一个sed解决办法!

1.短而快

由于总数出现在最后一行,$d是用于删除最后一行的命令。

wc -l $directory-path/*.txt | sed '$d'
Run Code Online (Sandbox Code Playgroud)

2. 添加标题行:

wc -l $directory-path/*.txt | sed '$d;1ilines total'
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有对齐。

3. 对齐:将左列格式化为 11 个字符宽度。

wc -l $directory-path/*.txt |
    sed -e '
        s/^ *\([0-9]\+\)/          \1/;
        s/^ *\([0-9 ]\{11\}\) /\1 /;
        /^ *[0-9]\+ total$/d;
        1i\      lines filename'
Run Code Online (Sandbox Code Playgroud)

会做这份工作

      lines file
          5 ./directory/1.txt
          3 ./directory/2.txt
          2 ./directory/3.txt
Run Code Online (Sandbox Code Playgroud)

4. 但如果你的wc版本真的可以把总数放在第一行:

这个是为了好玩,因为我不相信有一个wc版本将总数放在第一行,但是......

此版本在所有地方删除总行并在输出顶部添加标题行。

wc -l $directory-path/*.txt |
    sed -e '
        s/^ *\([0-9]\+\)/          \1/;
        s/^ *\([0-9 ]\{11\}\) /\1 /;
        1{
            /^ *[0-9]\+ total$/ba;
            bb;
           :a;
            s/^.*$/      lines file/
        };
        bc;
       :b;
        1i\      lines file' -e '
       :c;
        /^ *[0-9]\+ total$/d
    '
Run Code Online (Sandbox Code Playgroud)

这更复杂,因为我们不会删除第一行,即使它是总行

  • 对于这么小的操作来说似乎太复杂了。 (2认同)