linux下删除文本的空行

事情的起因是这样的,我有一个文件,用,分割的,第一列是染色体ID,我想知道这里面有多少个 ID,因此我想到去重计数。下面是我的代码。

cuiqingmei 2019/10/11 13:36:05 /if
$ less CL100126046-L01_1.win.gz |cut -f 1 -d,|sort|uniq -c
     24 
   4156 1
   2260 10
   2252 11
   2232 12
   1921 13
   1791 14
   1710 15

不要放过第一行的24后面统计的都是空的这一行,要细心。如果我把-c参数去掉的话,那么这里就会多出来一个空行,对于初学者,多一个空行,很难去注意到。
因此我check了一下这个文件,我发现,24条染色体的数据的最后多有一个空行,因为我需要去掉它来wc -l文本行数。所以你不能一上来就wc -l某文本行数,先要了解文本,再写代码。大部分人的小错误就是源于对输入/操作文件内容和格式的不熟悉。

因此:做如下事情:

删除空行

注意这里空行仅代表\n,即回车键,但是在linux的黑屏下,空行也可能还含有空格等字符的。
所以运行空行后,还需要check一下,有没有这类的。
比如说你用awk用空或者\t正则表达式来切割,print $1等,
或者你用grep匹配一下有没有空等开头的行了。
或者你再用一次去除空等符号的代码,直接去除掉。见下面处理的代码。
或者你在下游的代码里读入文本的时候,再过滤一下等等。
自己测试试试其他方法等。

常用语去除空行的操作

cat text |sed /^$/d

cat text |grep -v '^$'
# 我一般都使用这两个。

不常用


cat text | tr -s ‘\n'

cat text | sed -n '/./p' 

cat text | awk ‘{if($0!="")print}'
cat text | awk ‘{if(length !=0) print $0}'
awk NF data.txt   # 这个也可以将空格、tab等组成的空行删掉。
awk '!/^$/' data.txt


grep . data.txt
grep '[^$]' data.txt

sed '/^\s*$/d' data.txt  
# 这个命令还可将完全空格、tab等组成的空行删掉。

sed /^[[:space:]]*$/d filename
# 可以删除文件中的空行。
# 可以删除内容为多个空格/tab组成的行

其他

linux的vim的%s/^\n$//g的使用也可以删除末尾\n或者空行。

注意:部分代码我没测试,大家试试。因为毕竟正则表达式的表达方法多种多样。


其他学习:https://www.jb51.net/article/50641.htm
https://blog.csdn.net/qq_27446553/article/details/45306489

你可能感兴趣的:(linux下删除文本的空行)