awk/sed 解决方案,用于在与图案匹配后仅打印下一行



>我在一个文件夹中有多个文件。这是文件的外观 文件1.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

假设每个文件有一个提取(否则文件名头将重复(

$ awk '/##/{f=1; next} f{print ">"FILENAME; print; f=0}' *.txt > output.txt

Perl 来救援!

perl -ne 'print ">$ARGVn", scalar <> if /^##/' -- *.txt > output.txt
  • -n逐行读取输入
  • $ARGV包含当前输入文件名
  • scalar <>从输入中读取一行

使用grep的快速方法:

grep -A1 '##' *.txt|grep -v '##' > output.txt

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 

最新更新