如何删除所有带有sed或awk空白字段的行?

如何删除所有带有sed或awk空白字段的行?,sed,awk,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 您可以在

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

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

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

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

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

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

使用您的输入可能会起作用(但这取决于是否有空格或选项卡):

或者这个:

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

使用您的输入可能会起作用(但这取决于是否有空格或选项卡):

或者这个:

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

替代awk一衬板:

awk 'NF==4' yourFile

替代awk一衬板:

awk 'NF==4' yourFile

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

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

awk'{for(i=1;i假设您的文件最多有4个字段:

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

awk'{for(i=1;i单向使用
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

单向使用
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


您主要是问如何更改文件的位置吗?检查这里:在您的上下文中什么是“空白字段”?请提供输入和所需输出的示例。@Tichoderma我已编辑了我的问题。您主要是问如何更改文件的位置吗?检查这里:在您的上下文中什么是“空白字段”?请提供一个示例您的输入和所需的输出。@Tichoderma我已编辑了我的问题。我尝试了所有答案,但没有一个有效。我需要直接对文件进行更改,而不是打印输出。@user1606106将
-I
标记添加到
sed
选项。
awk
无法完成此操作。我尝试了所有答案,但没有一个成功其中一个成功了。我需要直接对文件进行更改,而不是打印输出。@user1606106将
-I
标志添加到
sed
选项。
awk
无法完成此操作。非常感谢您的回答。我不需要打印输出。我想直接对原始文件进行更改。谢谢非常感谢您的回答。我不需要打印输出。我想直接对原始文件进行更改。非常感谢您的回答。您的代码在给定的示例中工作正常。但是当它用于我的原始文件时,它会删除文件中的所有行。是否有其他选项?@user1606106:This代码使用
-n
标志禁止打印。它单独考虑文件,而不是作为带有
-s
标志的连续流,并使用
-i
标志在位编辑文件。当它发现一行包含四个或更多非空字段时,将打印它们。因此,如果原始文件没有四个或更多字段,则y将被清空。如果您能够将一些原始文件和每个文件的一些预期输出上载到或之类的内容,或许我可以帮助您。非常感谢您的回答。您的代码在给定的示例中工作正常。但是当它与我的原始文件一起使用时,它会删除文件中的所有行。是否有其他选项对于此?@user1606106:此代码禁止使用
-n
标志打印。它单独考虑文件,而不是使用
-s
标志作为连续流,并使用
-i
标志在位编辑文件。当它发现一行包含四个或更多非空字段时,将打印它们。因此,如果原始文件没有四个或更多字段将被清空。如果您能够将一些原始文件和每个文件的预期输出上载到类似或的内容,或许我可以帮助您。我没有
awk
,但是
mawk.exe
mawk“NF==5”如果我有5列,myfile
在Windows上可能吗?我没有
awk
,但是
mawk.exe
如果我有5列,在Windows上是否可能
mawk“NF==5”myfile