文件:
Data inserted into table. Total count 13
No error occurred
Data inserted into table. Total count 45
No error occurred
Data inserted into table. Total count 14
No error occurred
Data inserted into table. Total count 90
No error occurred
预期输出文件:
Data inserted into table. Total count 13
Data inserted into table. Total count 45
Data inserted into table. Total count 14
Data inserted into table. Total count 90
我希望输出看起来像这样:每隔一行将被删除,但行之间不会有间隙。
答案1
通过删除每隔一行来解决此问题可能很容易出错(例如,当进程有时生成两行而不是一行时)。也许最好过滤掉垃圾:
grep -v "No error occurred" file
它可以作为过滤器运行,您可以在此处添加更多垃圾模式并改进结果。
答案2
和sed
:
sed -e n\;d <file
使用 POSIX awk
:
awk 'FNR%2' <file
如果您年龄较大awk
(例如oawk
),您需要:
oawk 'NR%2 == 1' <file
和ex
:
$ ex file <<\EX
:g/$/+d
:wq!
EX
将就地编辑文件。
g
标记全局命令/$/
匹配每一行+d
删除下一行wq!
保存所有更改
此方法与方法具有相同的理想sed
,删除当前行从第 1 行开始的所有下一行。
和perl
:
perl -ne 'print if $. % 2' <file
和raku
:
raku -ne '.say if $*IN.ins % 2' <file
raku -ne '.say if ++$ % 2' <file
编辑
RakuIO::Handle.ins
被删除于这次提交。
答案3
根据这个问题,GNU sed
:
sed '0~2d' file
将删除每隔一行,但我想按其内容提供过滤行:
sed '/Data/! d' file
或具有相同的结果
sed '/No error/d' file
答案4
另一个答案,你可以使用 vi/vim!
qdjddq
然后,如果您的文件有 500 行(例如),请输入
250@天
然后写入并退出类型
:X
或者如果出现问题并且您不想保存:
:q!
解释:
q #Start Recording
d #Put the recording into register 'd'
j #Move the cursor down
dd #Delete the line
q #Stop recording
250 #Number of repeats
@d #Playback the recording in register 'd'.