在文件

时间:2015-06-12 17:22:13

标签: bash file sed process command

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

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

让我说我想做4次,有没有办法让这个过程获得中间文件?

提前谢谢

最好的问候

(文件是1m UTM坐标,我想降低测量的准确性,使文件易于管理)

3 个答案:

答案 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)

它的声音就像你需要的那样(用你想要的任何数字替换62):

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读取的文件要安全得多。