我有两个文本文件:FileA.txt 和 FileB.txt。
它们是制表符分隔的。
FileA.txt 包含事务级记录。
FileB.txt 包含参考/查找“表”。
我想通过将 FileB.txt 中的“公司”内容与 FileA.txt 中的“描述”相匹配,将 FileB.txt 中名为“公司”和“类别”的列附加到 FileA.txt。
需要澄清的是,匹配和合并应该基于 FileA.txt 中名为“Description”的列中包含的字符串中是否存在“Company”的内容。
对此的任何帮助将不胜感激。
文件A.txt
Date Description Amount
1/15/2016 1231 HAMBURGER #1234 Albany NY 24186166001200699400511 -22.54
3/3/2016 EASTERN FRUIT CO S1 Trenton NJ -110.93
2/26/2016 GUMPS* PAPER INC. 999-123-4560 CA -9.99
2/16/2016 EASY BURGERS SUPPLIES 01/31 #000741643 PURCHASE FOOD S TRENTON NJ -10.97
2/19/2016 FRANKFURTER Stamford CT -14.18
2/5/2016 CHECKCARD 0141FRANK'S GROCERIES Albany NY 24071056031987159327565 -87.92
3/11/2016 WIRED PENCIL & PAPER Sacramento NJ -72.16
3/18/2016 UNDERWATER MAIL SRVC 654321 800-1234567 DC -65
1/31/2016 VOYAGER REAL ESTATE CO . 415 DES:LEASE PYMNT INDN:123 Main St. CO ID:XXXXX999 ACH -126.65
1/18/2016 CARD 0101 US BASKETWEAVING ASSOC 123-456-7890 TX 54692166432112345 -265
4/18/2016 CARD ACH #89 UNDERWATER MAIL SRVC 654321 800-1234567 DC 6787654320 -250
文件B.txt
Company CATEGORY
HAMBURGER FOOD
FRANKFURTER FOOD
PAPER INC. OFFICE
WIRED PENCIL & PAPER OFFICE
FRANK'S GROCERIES GROC
EASY BURGERS SUPPLIES GROC
EASTERN FRUIT CO. GROC
US BASKETWEAVING ASSOC OFFICE
UNDERWATER MAIL SRVC OFFICE
VOYAGER REAL ESTATE REAL ESTATE
答案1
简单的实现。不确定 awk 是最好的工具。
awk -F '\t' '
BEGIN {
while(getline < "fileB.txt")
fileB[$1]=$0
}
{
matched=""
for (company in fileB)
{
if ( $2 ~ company )
{
matched=fileB[company]
break
}
}
if (matched)
print $0 "\t" matched
else
print
}' fileA.txt
这是向您展示如何开始,该脚本可以改进。只有输入干净时匹配才是可靠的,否则匹配不起作用。注意大写/小写,单词之间由多个空格分隔,...一行可能会匹配多个公司,该脚本不会检测到它,在这种情况下,您必须将换行符替换为计数器然后在循环后测试。