2011-11-25 254 views
3

我需要一个使用sed,awk或perl的班轮来删除我的数据文件中的空白行。在我的文件中的数据是这样的 -删除数据集中的空白行

Aamir 
Ravi 

Arun 


Rampaul 
Pankaj 

Amit 

Bianca 

这些空白是在随机出现在我的数据文件的任何地方。有人可以建议一个班轮从我的数据集中删除这些空行。

回答

5

它可以用很多方式完成。

e.g使用awk:

awk '$0' yourFile 

或sed的:

sed '/^$/d' yourFile 

或者grep的:

grep -v '^$' yourFile 
1

你可以这样做:

sed -i.bak '/^$/d' file 
2

AWK解决方案:

这里我们通过输入文件循环来检查它们是否有任何字段集。 NF是AWK的内置变量,设置为第几个字段。如果该线路为空,则NF未设置。在这一个班轮中,我们测试NF是否为真,即设为一个值。如果是,那么我们打印该行,当该模式为真时,该行隐含在AWK中。

awk 'NF' INPUT_FILE 

SED解决方案:

该解决方案是类似于在答复中提到的那些。作为语法显示,我们不打印任何空白的行。

sed -n '/^$/!p' INPUT_FILE 
3

Perl解决方案。从命令行。

$ perl -i.bak -n -e'print if /\S/' INPUT_FILE 

就地编辑文件并创建原始文件的备份。

+0

感谢。我正在寻找一个可以编辑的Perl脚本。 – anjanb

+0

删除'.bak',这将在没有备份的情况下就地编辑。 –

1

一个Perl的解决方案:

perl -ni.old -e 'print unless /^\s*$/' file 

...它创建原始文件的备份副本,后缀为 '名为.old'

2

为Perl它是比较容易的的sed,awk中,或grep的。

$作为TMP/TMPFILE阿米尔

拉维阿伦Rampaul

潘卡阿米特

比安卡$ perl的

-on -i的{^ \ s * \ n $} {}'tmp/tmpfile

为$ TMP/TMPFILE 阿米尔拉维·兰帕尔 阿伦阿米特潘卡 比安卡

+0

这里的名字用空格分隔符显示。但在shell中,名称显示在另一个之下,没有任何空行。 – Bharatt