我有一系列具有以下结构的文件
Header1
Data2
Garbage3
Data4
Garbage5
Data6
我想保留标题(line1)和数据(偶数行),并丢弃垃圾(奇数行除1)。我找到了一个丑陋的解决方案:
echo $(head -n 1 file.txt) $(awk 'NR%2==0' file.txt) | tr " " "\n" > file.tmp #I cannot rewrite file.txt directly
mv file.tmp file.txt
有没有办法优雅地在一行中做到这一点?注意:我不想打印到STDOUT,我想将file.txt替换为自己的干净版本吗?
答案 0 :(得分:2)
awk 'NR%2==0||NR==1' odd
Header1
Data2
Data4
Data6
这将根据两个条件打印行:
要对文件进行更改:
awk 'NR%2==0||NR==1' odd >odd.tmp && mv odd.tmp odd
答案 1 :(得分:1)
使用下面的命令,它将在文件内部进行。
sed -ie '1p;1~2d' filename.txt
示例:
$ cat sample.txt
Header1
Data2
Garbage3
Data4
Garbage5
Data6
$
$ sed -ie '1p;1~2d' sample.txt
$
$
$ cat sample.txt
Header1
Data2
Data4
Data6
$
答案 2 :(得分:0)
sed(gnu sed)单行应该有效:
sed -n '1{p;n};p;n' file
OR
sed -n '1p;0~2p' file
用你的例子,两个输出:
Header1
Data2
Data4
Data6