输入文件看起来像
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?
答案 0 :(得分:2)
sed -i '2,$ {/[^0-9][01]$/d}' test.txt
2,$
行动作,这一行说第二行到文件结尾{/[^0-9][01]$/d}
,删除以0
或1
结尾的行
'2,$ {/ [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
将输出保存到临时文件,然后将其作为原始文件移回GNU awk
,有就位选项awk -i inplace 'NR==1 || ($NF!=1 && $NF!=0)' test.txt
答案 1 :(得分:1)
这是我对此的看法。
sed -i.bak -e '1p;/[^0-9][01]$/d' file.txt
sed脚本打印第一行,然后删除与您描述的模式匹配的所有后续行。这假设你的第一行是候选删除;如果它在最后一个字段中包含0或1以外的内容,则此脚本将打印两次。 -i
选项告诉sed就地编辑(使用备份文件)。
Awk没有用于就地编辑文件的等效选项 - 如果你想要这种功能,你需要在你的awk脚本的shell包装器中实现它,就像@sundeep建议的那样。
请注意,我没有使用GNU sed,但是这个命令应该同样适用它。
答案 2 :(得分:1)
awk
救援!
$ awk 'NR==1 || $NF && $NF!=1' file
或更隐蔽
$ awk 'NR==1 || $NF*($NF-1)' file
答案 3 :(得分:0)
这可能适合你(GNU sed):
mPic.setImageURI(null);
mPic.setImageURI(photoUrl);
除第一行外,删除以sed -i '1b;/\s[01]$/d' file
或0
结尾的所有行。