我想多次将此sed命令应用于文件:
sed '1~2d' file.txt>file1.txt
让我说我想做4次,有没有办法让这个过程获得中间文件?
提前谢谢
最好的问候
(文件是1m UTM坐标,我想降低测量的准确性,使文件易于管理)
答案 0 :(得分:0)
试试这个:
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命令。
BTW,$(())
是bash算术评估。这就是用1减法的方法。
答案 1 :(得分:0)
它的声音就像你需要的那样(用你想要的任何数字替换6
和2
):
awk '{for (i=2;i<=6;i+=2) if (!(NR%i)) print > ("file"i)}' file
e.g。在空目录中运行:
$ 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
答案 2 :(得分:0)
你可以用相反的方式做到这一点:
sed -n -i '16~16p' file.txt
-n
选项会抑制sed
处理每一行后打印缓冲区的默认行为。 'p'
命令打印出您想要的那些。
-i
选项告诉sed
处理指定文件&#34;就地&#34;,这实际上意味着它将管理创建临时文件,并在成功时替换原始文件用它。这比将输出直接重定向到sed
读取的文件要安全得多。