Par*_*met 5 sed awk perl text-processing
我们如何删除仅在 X 到 Y 行中看到的重复行并就地更改文件?
例如,如果我只想删除第 10 行到第 20 行的重复行。
使用 GNU awk
(4.1.0 或更高版本,扩展名inplace
\xc2\xb9):
gawk -i /usr/share/awk/inplace.awk '\n NR >= 10 && NR <= 20 {\n if ($0 in seen) next\n seen[$0]\n }\n {print}' ./file\n
Run Code Online (Sandbox Code Playgroud)\n或者与perl
:
perl -ni -e 'print if $. < 10 or $. > 20 or !$seen{$_}++' ./file\n
Run Code Online (Sandbox Code Playgroud)\n处理多个文件:
\ngawk -i /usr/share/awk/inplace.awk '\n BEGINFILE{delete seen}\n FNR >= 10 && FNR <= 20 {\n if ($0 in seen) next\n seen[$0]\n }\n {print}' ./*.txt\n
Run Code Online (Sandbox Code Playgroud)\n或者与perl
:
perl -ni -e '\n print if $. < 10 or $. > 20 or !$seen{$_}++;\n if (eof) {close ARGV; undef %seen}' ./*.txt\n
Run Code Online (Sandbox Code Playgroud)\n\xc2\xb9不要使用-i inplace
as尝试首先从当前工作目录gawk
加载inplace
扩展名(asinplace
或),否则有人可能会在其中植入恶意软件。随系统提供的扩展inplace.awk
的路径可能会有所不同,请参阅输出inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'