我需要删除文本文件中的奇数行以进行下采样.我找到了这个命令,
awk 'NR%2==0' file
Run Code Online (Sandbox Code Playgroud)
但它只打印终端中的奇数行.如何真正删除它们?
我真的不关心偶数或奇数,我希望它们从文件中删除或打印在另一个文件中.这只会在终端上打印出来.
Tho*_*hor 76
它%是一个模数运算符,NR是当前行号,因此NR%2==0仅对偶数行才有效,并将调用它们的默认规则({ print $0 }).因此,要仅保存偶数行,请将输出重定向awk到新文件:
awk 'NR%2==0' infile > outfile
Run Code Online (Sandbox Code Playgroud)
你可以完成同样的事情sed.devnulls答案显示了如何做到这一点GNU sed.以下是sed没有~运营商的版本的替代方案:
保持奇怪的线条
sed 'n; d' infile > outfile
Run Code Online (Sandbox Code Playgroud)
保持均匀的线条
sed '1d; n; d' infile > outfile
Run Code Online (Sandbox Code Playgroud)
dev*_*ull 12
使用GNU sed:
sed -i '0~2d' filename
Run Code Online (Sandbox Code Playgroud)
从文件中删除偶数行.
删除奇数行:
sed -i '1~2d' filename
Run Code Online (Sandbox Code Playgroud)
该-i选项将使更改保存到文件中.
引自手册:
`FIRST~STEP'
This GNU extension matches every STEPth line starting with line
FIRST. In particular, lines will be selected when there exists a
non-negative N such that the current line-number equals FIRST + (N
* STEP). Thus, to select the odd-numbered lines, one would use
`1~2'; to pick every third line starting with the second, `2~3'
would be used; to pick every fifth line starting with the tenth,
use `10~5'; and `50~0' is just an obscure way of saying `50'.
Run Code Online (Sandbox Code Playgroud)
这可能对您有用(GNU 和非 GNU sed):
sed -n 'p;n' file # keep odd
sed -n 'n;p' file # keep even
Run Code Online (Sandbox Code Playgroud)
-n: 抑制打印
p: 打印当前行
n: 下一行
不要专注于消极(删除线),专注于积极(选择线),你的解决方案也会效仿.因此,I need to remove odd lines您应该思考I need to select even lines,然后解决方案就是:
awk '!(NR%2)' file
Run Code Online (Sandbox Code Playgroud)
如果要将结果保存到新文件:
awk '!(NR%2)' file > newfile
Run Code Online (Sandbox Code Playgroud)
或者回到原文:
awk '!(NR%2)' file > newfile && mv newfile file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41367 次 |
| 最近记录: |