无法从 UNIX 上的命令文本输出文件中删除空格

Posted

技术标签:

【中文标题】无法从 UNIX 上的命令文本输出文件中删除空格【英文标题】:Not able to delete the blank or empty space from a command text output file on UNIX 【发布时间】:2020-12-22 15:57:16 【问题描述】:

AIX 上的命令“(sleep 4 ; echo q) | topas -P |tee /tmp/top”在命令文本文件中生成此输出,我无法从中删除空格。我试过 sed/perl 和 awk 命令只打印包含字符的行,但没有任何帮助。我是否需要将此文件转换为 ASCII 文本格式才能使用 sed/per/grep 或 awk 来删除空行?

$ file /tmp/top
/tmp/top: commands text

$ head -n33 /tmp/top






                                    DATA  TEXT  PAGE                  PGFAULTS
USER          PID     PPID PRI  NI   RES   RES SPACE    TIME  CPU%   I/O   OTH COMMAND
root      9044256 20447712  60  20 2.43M  304K 2.43M    0:00   2.1     0   253 topas
root     14942646  8913178  60  20 72.0M 37.8M 72.0M    0:42   0.2     0     1 TaniumCl
root     20447712 21889434  60  20  148K  312K  508K    0:00   0.2     0     0 ksh
root     21955056 20447712  60  20  216K 36.0K  216K    0:00   0.1     0     3 sed
root     24838602 20447712  60  20  120K 8.00K  120K    0:00   0.1     0     1 tee
root      9830690 10355194  60  20  120K 4.00K  120K    0:00   0.1     0     0 sleep
root     12255642 13893896  60  41 57.5M 39.8M 57.5M   33:42   0.1     0     0 mmfsd
root     10355194 20447712  60  20  148K  312K  508K    0:00   0.1     0     0 ksh
root      9109790  4063622  39  20 12.9M 3.68M 12.9M    5:19   0.1     0     0 rmcd
root     13697394  4063622  60  20 8.27M 55.9M 8.27M   17:18   0.1     0     0 backup_a
root     20906328        1  60  20 1.81M     0 1.81M    3:15   0.0     0     0 nfsd
root      4260244        1  60  20  620K 88.0K  620K   41:23   0.0     0     0 getty
root      1573172        0  37  41  960K     0  960K   15:17   0.0     0     0 gil
nagios    9240876  4063622  60  20 23.7M  736K 23.7M    9:43   0.0     0     0 ncpa_pas
root      4391332        1  60  20 12.5M  252K 12.5M    4:43   0.0     0     0 secldapc
a_RTHOMA  8323456 12059082  60  20  636K 3.06M 1016K    0:00   0.0     0     0 sshd
root      8388902  4063622  60  20 1.76M 1.05M 1.76M    7:03   0.0     0     0 clcomd
root      3539312        1  60  20  448K     0  448K    5:07   0.0     0     0 lock_rcv
root      3670388        1  60  20  448K     0  448K    4:18   0.0     0     0 sec_rcv
root      5767652  4063622  48   8  392K  324K  392K    2:49   0.0     0     0 xntpd
root      6816242        1  60  20 1.19M     0 1.19M    1:05   0.0     0     0 rpc.lock
root       459026        0  16  41  640K     0  640K    2:19   0.0     0     0 reaffin
root     23921008        1  60  20 1.00M     0 1.00M    4:36   0.0     0     0 n4cb
lpar2rrd 23200112 25625020  64  22  868K  120K  868K    0:00   0.0     0     0 vmstat
root      7143896        1  40  41  448K     0  448K    0:48   0.0     0     0 nfsWatch
root      6160840        1  60  20  448K     0  448K    0:09   0.0     0     0 j2gt

【问题讨论】:

您是否尝试通过od -c 管道输出以查看这些空白行是否完全空白?另一种选择可能是只使用tail -n +7 跳过前七行(如果空格数一致)。 sedawk 你尝试过什么? od -c 会给我这样的东西:$ od -c /tmp/top 0000000 033 [ ? 1 小时 033 = 033 [ 3 9 ; 4 9 米 033 0000020 [ 4 0 米 033 [ ? 1 0 4 9 h 033 ( B 033 0000040 [ m 033 [ H 033 [ 2 J 033 [ 3 3 m T o 0000060 pas Monitorfor 0000100 host : 033 [ 3 7 mte 0000120 stsac 2 p 033 [ 3 3 m I 000010 : 033 [ 3 7 m tail -n +7 看起来更好 @ChrisJ,tail -n +7 似乎确实有效,我会测试并确认 @ronythomas,还是 awk '/^[a-zA-Z]+/' file 一个? 【参考方案1】:

看起来你的输出文件有一些 ASCII 字符,所以最好只打印那些以字母开头的行:

awk '/^[a-zA-Z]/' Input_file

【讨论】:

以上是关于无法从 UNIX 上的命令文本输出文件中删除空格的主要内容,如果未能解决你的问题,请参考以下文章

从文本文件中删除二进制符号

如何从 oh-my-zsh 和 Mac 上的“ls”命令输出中删除文件类型分类器?

Unix系统编程()open,read,write和lseek的综合练习

DOS和UNIX文本文件之间相互转换的方法&批量

word删除文档中所有空格

从 proc/pid/cmdline 解析命令行参数