Решение awk / sed для печати только следующей строки после совпадения с шаблоном - PullRequest
0 голосов
/ 13 октября 2018

У меня есть несколько файлов в папке.Вот как файл выглядит как File1.txt

ghfgh gfghh
  dffd  kjkjoliukjkj
  sdf ffghf
  sf 898575
  sfkj utiith

## 
my data to be extracted 

Я хочу извлечь строку сразу под шаблоном "##" из всех файлов и записать их в выходной файл.Я хочу, чтобы имя файла тоже добавлялось в выходной файл.Желаемый вывод

>File1
My data to be extracted
>File2
My data to be extracted
>File3
My data to be extracted 

This is what i tried 
awk '/##/{getline; print FILENAME; print ">"; print}' *.txt > output.txt

Ответы [ 4 ]

0 голосов
/ 14 октября 2018

POSIX или GNU sed:

$ sed -n '/^##/{n;p;}' file
my data to be extracted 

grep и sed:

$ grep -A 1 '##' file | sed '1d'
my data to be extracted 
0 голосов
/ 13 октября 2018

Perl для спасения!

perl -ne 'print ">$ARGV\n", scalar <> if /^##/' -- *.txt > output.txt
  • -n читает строку ввода построчно
  • $ARGV содержит текущее имя файла ввода
  • scalar <> читает одну строку из ввода
0 голосов
/ 13 октября 2018

быстрый способ с помощью grep:

grep -A1 '##' *.txt|grep -v '##' > output.txt
0 голосов
/ 13 октября 2018

предполагает одно извлечение на файл (в противном случае заголовок имени файла будет повторяться)

$ awk '/##/{f=1; next} f{print ">"FILENAME; print; f=0}' *.txt > output.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...