如何跳过awk中的特定行并打印剩余的行

时间:2013-09-30 07:34:22

标签: awk

如何只读取包含ff行的文件中的行:3,9,12,15。 这个想法是每当我得到x和y时,我想在包含x和y的行中打印最后一行。 我的意思是,例如,如果我有像以下的awk脚本:BEGIN {name = $ 2;值= $ 3; } {if(name == x&& value == y&&&scan;到达第3,9,12和15行)printf(“hello world”)}。我可以使用什么表达而不是“扫描到达第3,9,12和15行”

1 x y
2 x y 
3 x y 
4 a d
5 e f
6 x y
7 x y
8 x y
9 x y
10 g f
11 x y
12 x y
13 p r
14 w c
15 x y
16 a z

3 个答案:

答案 0 :(得分:2)

awk的一种方式:

$ awk '/^[0-9]+ x y$/{a=$0;f=1;next}f{print a;f=0}' file
3 x y
9 x y
12 x y
15 x y

没有awk的一种方式:

$ tac file | uniq -f1 | fgrep -w 'x y' | tac
3 x y
9 x y
12 x y
15 x y

答案 1 :(得分:1)

有人这样吗?

awk 'a=="xy" && $2$3!="xy" {print b} {a=$2$3;b=$0}' file
3 x y
9 x y
12 x y
15 x y

答案 2 :(得分:-1)

你需要在这里使用两个while循环来检查一行而另一个循环来迭代。像这样的东西。希望有所帮助

String line =“”;         int i = 0;

    try {
        BufferedReader in = new BufferedReader(new FileReader("D:\\readline.txt"));
        while ((line = in.readLine()) != null) {
            i++;
            if (line.charAt(0) == 'x' && line.charAt(2) == 'y') {
                System.out.println("Line containg Y and Y");
                String searchline = line;
                while ((line = in.readLine()) != null) {   //Iterate untill you find the last line of X and Y
                    i++;         //To keep count of the line read
                    if (line.charAt(0) == 'x' && line.charAt(2) == 'y') {
                        searchline = line;
                        continue;
                    } else {
                        break;
                    }

                }

                System.out.println("Printing the  line ::" + (i - 1) + ":: containing X and Y::::::::" + searchline);
            }
        }

    } catch (Exception e) {
        System.out.println("Exception Caught::::");
    }
}