Awk 删除“;0“;或;1“;从每行末尾开始,第一行除外
输入文件如下所示Awk 删除“;0“;或;1“;从每行末尾开始,第一行除外,awk,sed,Awk,Sed,输入文件如下所示 Kick-off team 68 0 Ball safe 69 1 Attack 77 8 Attack 81 4 Throw-in 83 0 Ball possession 86 3 Goal kick 100 10 Ball possession 101 1 Ball safe 114 13 Throw-in 123 9 Ball safe 134
Kick-off team 68 0
Ball safe 69 1
Attack 77 8
Attack 81 4
Throw-in 83 0
Ball possession 86 3
Goal kick 100 10
Ball possession 101 1
Ball safe 114 13
Throw-in 123 9
Ball safe 134 11
Ball safe 135 1
Ball safe 137 2
最后应该是这样的:
Kick-off team 68 0
Attack 77 8
Attack 81 4
Ball possession 86 3
Goal kick 100 10
Ball safe 114 13
Throw-in 123 9
Ball safe 134 11
Ball safe 137 2
我的解决办法是
awk '{print $NF}' test.txt | sed -re '2,${/(^0$|^1$)/d}'
如何直接更改文件,例如sed-i
sed -i '2,$ {/[^0-9][01]$/d}' test.txt
要执行的行,这一行表示文件末尾的第二行2,$
从筛选的行中,删除以{/[^0-9][01]$/d}
或0
1
- 如果最后一列之前的字符始终是空格,则也可以使用${/[01]$/d}
使用更适合列操作的
awk
:
awk 'NR==1 || ($NF!=1 && $NF!=0)' test.txt > tmp && mv tmp test.txt
第一行NR==1
最后一列不应是($NF!=1&&$NF!=0)
或0
1
- 如果最后一列只有非负数,也可以使用
$NF>1
- 如果最后一列只有非负数,也可以使用
将输出保存到临时文件,然后将其作为原始文件移回>tmp&&mv tmp test.txt
- 使用
,有一个inplace选项GNU awk
awk-i inplace'NR==1 | |($NF!=1&&$NF!=0)'test.txt
要执行的行,这一行表示文件末尾的第二行2,$
从筛选的行中,删除以{/[^0-9][01]$/d}
或0
1
- 如果最后一列之前的字符始终是空格,则也可以使用${/[01]$/d}
使用更适合列操作的
awk
:
awk 'NR==1 || ($NF!=1 && $NF!=0)' test.txt > tmp && mv tmp test.txt
第一行NR==1
最后一列不应是($NF!=1&&$NF!=0)
或0
1
- 如果最后一列只有非负数,也可以使用
$NF>1
- 如果最后一列只有非负数,也可以使用
将输出保存到临时文件,然后将其作为原始文件移回>tmp&&mv tmp test.txt
- 使用
,有一个inplace选项GNU awk
awk-i inplace'NR==1 | |($NF!=1&&$NF!=0)'test.txt
- 以下是我对此的看法
sed -i.bak -e '1p;/[^0-9][01]$/d' file.txt
sed脚本打印第一行,然后删除与您描述的模式匹配的所有后续行。这假设您的第一行是要删除的候选行;如果最后一个字段中包含0或1以外的内容,此脚本将打印两次。-i
选项告诉sed就地编辑(使用备份文件)
Awk没有用于就地编辑文件的等效选项——如果您想要这种功能,您需要在Awk脚本周围的shell包装中实现它,正如@sundeep所建议的那样
请注意,我没有使用GNU-sed,但是这个命令应该同样适用于它。以下是我对此的看法
sed -i.bak -e '1p;/[^0-9][01]$/d' file.txt
sed脚本打印第一行,然后删除与您描述的模式匹配的所有后续行。这假设您的第一行是要删除的候选行;如果最后一个字段中包含0或1以外的内容,此脚本将打印两次。-i
选项告诉sed就地编辑(使用备份文件)
Awk没有用于就地编辑文件的等效选项——如果您想要这种功能,您需要在Awk脚本周围的shell包装中实现它,正如@sundeep所建议的那样
请注意,我没有使用GNU-sed,但是这个命令应该同样适用于它。这可能适用于您(GNU-sed):
除第一行外,删除以0
或1
结尾的任何行。这可能适用于您(GNU-sed):
除第一行外,删除以
0
或1
结尾的任何行,以便救援
$ awk 'NR==1 || $NF && $NF!=1' file
或者更神秘
$ awk 'NR==1 || $NF*($NF-1)' file
awk
救援
$ awk 'NR==1 || $NF && $NF!=1' file
或者更神秘
$ awk 'NR==1 || $NF*($NF-1)' file
这离我的很近。我会用这个。谢谢你,你可以用
$NF!~/^[01]$/
@JamesBrown是的,但是如果比较有效,为什么要使用regex;)@Sundeep保存字节时,它们不会在树上生长;D@JamesBrown,数字比较的处理速度比正则表达式快。保存字节或CPU周期更好?这和我的差不多。我会用这个。谢谢你,你可以用$NF!~/^[01]$/
@JamesBrown是的,但是如果比较有效,为什么要使用regex;)@Sundeep保存字节时,它们不会在树上生长;D@JamesBrown,数字比较的处理速度比正则表达式快。最好是保存字节,或者CPU周期?这个问题已经解决了。谢谢你的建议!这个问题解决了。谢谢你的建议!太棒了,很高兴我能帮忙!:-)如果这个答案最适合你,请随意点击答案左侧的复选标记。太棒了,很高兴我能帮上忙!:-)如果这个答案最适合你,请点击答案左侧的复选标记。