在文件上多次应用 sed 命令



我想多次将此 sed 命令应用于文件:

sed '1~2d' file.txt>file1.txt

假设我想做 4 次,有没有办法完成这个过程,同时获取中间文件?

提前谢谢你

此致敬意

(文件是 1m UTM 坐标,我想降低测量精度以使文件易于管理)

听起来你需要

的是(用你想要的任何数字替换62):

awk '{for (i=2;i<=6;i+=2) if (!(NR%i)) print > ("file"i)}' file

例如,在空目录中运行:

$ seq 1 20 | awk '{for (i=2;i<=6;i+=2) if (!(NR%i)) print > ("file"i)}'
$ lf
file2  file4  file6
$ cat file2
2
4
6
8
10
12
14
16
18
20
$ cat file4
4
8
12
16
20
$ cat file6
6
12
18

试试这个:

mv file.txt file0.txt
for i in `seq 1 10`; do
    sed '1~2d' file$(($i-1)).txt > file$i.txt
done
mv file0.txt file.txt

它将生成 10 个文件名为 file1.txt、file2.txt 等的文件。其中每个文件都在前一个文件上运行 sed 命令。

顺便说一句,$(())是 bash 算术计算。这就是用 1 减法的方式。

你可以用相反的方式做到这一点:

sed -n -i '16~16p' file.txt

-n 选项禁止sed在处理每一行后打印缓冲区的默认行为。 'p'命令打印所需的内容。

-i选项告诉sed"就地"处理命名文件,这实际上意味着它将管理创建临时文件,并在成功后用它替换原始文件。 这比将输出直接重定向到sed正在读取为输入的文件要安全得多。

相关内容

  • 没有找到相关文章

最新更新