Bash:读取文件内容直到某些模式匹配并存储在另一个文件中

时间:2017-06-14 07:30:50

标签: bash file

我有一个包含一些数据的文本文件,这些数据用虚线分隔。我需要将每天的数据存储在一个包含01-01-2017 Some text data -------------------------- 10-10-2017 Some text data -------------------------- 的单独文件中。

INPUT_FILE:

while read line; do
    if [[ $line =~ ^[0-9]{2}-[0-9]{2}-[0-9]{4}$ ]] ; then; fi
done > Input_file

到目前为止,我尝试的是:代码中有一些错误。

sudo apt-get build-dep python-matplotlib

我正在尝试从文件中读取日期格式并创建新文件并向其附加数据格式。

1 个答案:

答案 0 :(得分:1)

如果您正在寻找bash解决方案,请使用:

#!/bin/bash

f="${1?needs a filename}"
while IFS= read -r line; do
   [[ $line =~ ^([0-9]{2})-([0-9]{2})-([0-9]{4})$ ]] &&
   fn="${f}_${BASH_REMATCH[3]}${BASH_REMATCH[2]}${BASH_REMATCH[1]}"
   [[ $line =~ ^-+$ ]] || echo "$line" >> "$fn"
done < "$f"

否则这个稍微冗长的awk也会起作用:

awk '/^([0-9]{2})-([0-9]{2})-([0-9]{4})$/{
   split($0, a, "-"); if (fn) close(fn); fn = FILENAME "_" a[3] a[2] a[1]} 
   !/^-+$/{print $0 > fn}' filename