如何在txt文件的多行中查找字符串,然后将所有内容添加到新的csv行

问题描述 投票:0回答:1

我有数千个 txt 文件,这些文件是从包含“联系我们”表单的电子邮件转换而来的。我需要在第二个“列”中查找/选择字符串,但每封电子邮件开始的行数是可变的。看起来这些列是用制表符分隔的。首先,联系表单中的最后一个字段跨越多行,并且某些电子邮件带有管道符号“|”自从我使用 html2text 将它们转换为 txt 文件以来,似乎已经创建了这些文件。如何提取“名字”、“姓氏”和“长文本”字段的值?最终这些将作为新行添加到 csv 中。 variable number of lines at start of email ... .. |First Name [tab] Bob | |Last Name [tab] Jones | (more lines like above) |Long Text [tab] laksjdflkjasl| fasgafg asdfj | gsfg asdgfa| gsg ergsdfgre |

使用 awk,下面不是很有效,可能是因为名字和姓氏中有空格,但将其放在引号中不起作用

awk -F'First Name|Last Name' '{print $2}' 1.txt

我真的不知道如何处理长文本字段,因为下面只打印一行而不是我需要的所有文本

awk -F'Long Text' '{print $2}' 1.txt

似乎使用带有制表符字段分隔符的 awk 是可能的,但我还没有进行太多尝试。

linux bash awk sed grep
1个回答
0
投票

cat t.awk $1~/(First|Last) Name/{ gsub(/^ /,"",$2); gsub(/ *[|] *$/,"",$2);print $2 } /Long Text/,!/./{ if(NF==2){ gsub(/^ /,"",$2); gsub(/ *[|] *$/,"",$2); print $2 } else{ gsub(/^ */,"",$1); gsub(/ *[|] *$/,"",$1); print $1 }

调用方式

awk -F'\t' -f t.awk extract Bob Jones laksjdflkjasl fasgafg asdfj gsfg asdgfa gsg ergsdfgre

	
© www.soinside.com 2019 - 2024. All rights reserved.