我有数千个 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 是可能的,但我还没有进行太多尝试。
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