找到两个变量字符串并将其中一个写入文件

找到两个变量字符串并将其中一个写入文件

我有一个包含 2 行信息的文本文档。第 1 行包含文件名,第 2 行包含参考 ID。该文档包含除所需信息之外的其他字符串,我正在尝试想出一种不混乱的方法来仅收集我想要的信息。多次使用“cut -d”似乎很草率。

以下是我的数据的一个例子

12:"content":"file;\r\n\tfilename=\"TestingFile.txt"} 
13-"refid":"9B46BCAEDC9923"}]

利用这些信息,我想创建一个名为 TestingFile.txt 的文件并将 refid 值写入内容 - 基本上是“ ”之间的值,仅此而已。

文件名=\"重新定义”:” 总是会位于我想要抓取的数据之前,并且总会有一些字符位于最后一个在线上。

答案1

awk -F'"' 'NR==1 {fname=$(NF-1);} NR==2{print $(NF-1) >fname;}' file

解释

awk隐式循环遍历文件的每一行。每行分为多个字段。

  • -F'"'

    这使得双引号字符充当字段分隔符。查看示例输入,这意味着我们想要的字段将是每行的倒数第二个

  • NR==1 {fname=$(NF-1);}

    第一行是文件名。在 中awkNF是一行上的字段数。因此,$(NF-1)引用倒数第二个字段。其内容保存到变量 中fname

  • NR==2{print $(NF-1) >fname;}

    第二行的倒数第二个字段是 ID。我们print将此 ID 添加到名为 的文件fname

例子

如果针对示例输入运行上述代码,则会TestingFile.txt在当前目录中创建一个文件:

$ cat TestingFile.txt
9B46BCAEDC9923

更复杂的输入

假设输入文件如下:

12:"content":"file;\r\n\tfilename=\"TestingFile.txt","date":"2014-10-23"} 
13-"refid":"9B46BCAEDC9923","author":"Anon"}]

由于我们的数据不再是倒数第二个字段,因此我们需要更改代码awk

awk -F'"' 'NR==1 {sub(/.*tfilename=\\"/, "");fname=$1;} NR==2 {sub(/.*refid":"/,"");print $1>fname;}' file2

此代码删除文件名(第 1 行)或 ID(第 2 行)之前的所有字符。完成此操作后,我们想要的信息将位于字段 1 中。其他代码相同。

相关内容