如何删除所有带有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
?