На самом деле sed -n '/pattern/{n;p}' filename
выйдет из строя, если pattern
соответствует continuous
линиям:
$ seq 15 |sed -n '/1/{n;p}'
2
11
13
15
Ожидаемые ответы должны быть:
2
11
12
13
14
15
Мое решение:
$ sed -n -r 'x;/_/{x;p;x};x;/pattern/!s/.*//;/pattern/s/.*/_/;h' filename
Например:
$ seq 15 |sed -n -r 'x;/_/{x;p;x};x;/1/!s/.*//;/1/s/.*/_/;h'
2
11
12
13
14
15
Объясняет:
x;
: в начале каждой строки из ввода используйте x
для обмена содержимым в pattern space
& amp; hold space
. /_/{x;p;x};
: если pattern space
, который фактически является hold space
, содержит _
(это только indicator
, указывающий, соответствует ли последняя строка pattern
или not), затем используйте x
для обмена фактическим содержимым current line
на pattern space
, используйте p
для печати current line
и x
для восстановления этой операции. x
: восстановить содержимое в pattern space
и hold space
. /pattern/!s/.*//
: если current line
НЕ соответствует pattern
, это означает, что мы НЕ должны напечатайте следующую строку ниже, затем используйте команду s/.*//
, чтобы удалить все содержимое в pattern space
. /pattern/s/.*/_/
: если current line
соответствует pattern
, это означает, что мы должны напечатать следующую строку ниже , тогда нам нужно установить indicator
, чтобы сообщить sed
распечатать строку NEXT, поэтому используйте s/.*/_/
, чтобы заменить все содержимое в pattern space
на _
(вторая команда будет использовать его, чтобы судить, если последняя строка соответствует pattern
или нет). h
: перезаписать hold space
с содержимым в pattern space
; то содержание в hold space
равно ^_$
, что означает, что current line
соответствует pattern
или ^$
, что означает, что current line
НЕ соответствует pattern
. s/.*/_/
, pattern space
НЕ МОЖЕТ соответствовать /pattern/
, поэтому s/.*//
ДОЛЖЕН быть выполнен! Если ваши данные называются df
примерно так:
library(ggplot2)
library(reshape2)
meltdf <- melt(df,id="Year")
ggplot(meltdf,aes(x=Year,y=value,colour=variable,group=variable)) + geom_line()
[/g0]
Так что в основном в моем коде, когда я использую aes()
Im говорит, что ось x Year
, ось y value
, а затем colour
/ grouping
находится на variable
.
Функция melt()
была для получения ваших данных в формате ggplot2
. Один большой столбец для year
и т. Д., Который вы тогда эффективно разделяете, когда вы рассказываете об этом по отдельным строкам для вашего variable
.
meltdf<-melt(df,id="Year")
. Я тоже исправил это. – user1317221_G 11 November 2012 в 12:04geom_smooth
, возможно, в комбинации сgeom_point
, чтобы получить более плавный график. – Paul Hiemstra 11 November 2012 в 12:45