如何使用sed或awk删除所有包含空白字段的行?

时间:2012-10-01 07:11:00

标签: sed awk

我想从文本文件中删除所有包含空白字段的行。如何更改以下代码以直接对文件进行更改?

awk '!/^\t|\t\t|\t$/' *.txt    

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0
GL  126.2   
CY  34.9    
CY  44.9    

期望的输出

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0

5 个答案:

答案 0 :(得分:7)

替代awk one-liner:

awk 'NF==4' yourFile

答案 1 :(得分:3)

使用GNU sed的一种方式:

sed -n -s -i '/[^ \t]* [^ \t]* [^ \t]* [^ \t]/p' *.txt

结果:

AD  125.9    MN 124.9
AC  38.9     VG 13.2
AV  34.6     BG 33.0

答案 2 :(得分:0)

您可以在原始awk命令中使用for循环:

for f in *.txt
do
  cp $f /tmp/mytempfile
  awk '!/^\t|\t\t|\t$/' /tmp/mytempfile > $f
done

答案 3 :(得分:0)

使用您的输入可能会有效(但这取决于是否有空格或制表符):

sed '/^.\{13\}\s/d' INPUTFILE

或者这个:

awk 'substr($0,14,1) = " " { print }' INPUTFILE

答案 4 :(得分:0)

假设您的文件最多包含4个字段:

awk '{for(i=1;i<5;i++){if($i=="")next;}print}' file_name

测试如下:

> cat temp
AD      125.9    MN     124.9
AC      38.9     VG     13.2
AV      34.6     BG     33.0
GL      126.2
CY      34.9
CY      44.9
>awk '{for(i=1;i<5;i++){if($i=="")next;}print}' temp
AD      125.9    MN     124.9
AC      38.9     VG     13.2
AV      34.6     BG     33.0
>