我想多次将此 sed 命令应用于文件:
sed '1~2d' file.txt>file1.txt
假设我想做 4 次,有没有办法完成这个过程,同时获取中间文件?
提前谢谢你
此致敬意
(文件是 1m UTM 坐标,我想降低测量精度以使文件易于管理)
的是(用你想要的任何数字替换6
和2
):
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
正在读取为输入的文件要安全得多。