1

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

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
4

5 回答 5

7

替代 awk 单线:

awk 'NF==4' yourFile
于 2012-10-01T08:22:53.750 回答
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
于 2012-10-01T09:45:15.487 回答
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
>
于 2012-10-01T08:24:04.343 回答
0

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

for f in *.txt
do
  cp $f /tmp/mytempfile
  awk '!/^\t|\t\t|\t$/' /tmp/mytempfile > $f
done
于 2012-10-01T08:02:07.077 回答
0

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

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

或这个:

awk 'substr($0,14,1) = " " { print }' INPUTFILE
于 2012-10-01T08:02:24.370 回答