![仅读取文本文件中的特定行并将匹配项保存到变量中](https://linux22.com/image/5190/%E4%BB%85%E8%AF%BB%E5%8F%96%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9A%E8%A1%8C%E5%B9%B6%E5%B0%86%E5%8C%B9%E9%85%8D%E9%A1%B9%E4%BF%9D%E5%AD%98%E5%88%B0%E5%8F%98%E9%87%8F%E4%B8%AD.png)
我有这个问题。
我需要从文本文件中提取一些单词,我通过该文本中的特定模式找到这些单词。例如:
/this/is/path:
file1.txt,date-3
file2.txt,date-2
/this/is/path2:
file.txt,date-1
file2.txt,date-5
模式将是/path:
和 只选择在那之后和之前的行/path:
。因为可能存在同名的文件。我需要找到准确的内容file.txt
并采取这三件事:
- 文件
- 日期
- 发射次数
分成3个变量。
示例:我有格式为的文本文档:
/home/名称/文件: 文件.txt,12.5.2014-1 文件2.txt,15.8.2014-2 /主页/名称/音乐: 文件.txt,15.4.2014-2 f2ile3.txt,8.2.2015-5 文件2.txt,7.6.2014-3 /home/名称/视频: 文件.txt,日期-5
并且目录音乐和文档具有相同的文件,我只想从音乐 file.txt 中选择。但是当它查找 file.txt 时,它也会在 Documents 目录中找到一个,所以我只想在 music 目录中选择一个,并且它将以 Video 目录结束。当它找到 file.txt 时,它将像这样保存:1.variable=file.txt, 2.variable=15.4.2014,3.variable=2。
答案1
使用awk:
awk -F'[,-]' '
/Music/ {f=1}
/^$/ {f=0} f && /file\.txt/ \
{printf "%s\n%s\n%s\n", "var1="$1,"var2="$2,"var3="$3}
' file
var1=file.txt
var2=15.4.2014
var3=2
...假设实际上块之间有空行(按照第一个示例)。