【发布时间】:2022-10-23 19:14:32
【问题描述】:
我有两个文件,A 和 B,列用 \ 分隔。
柱子2文件的一个正是相同的作为列1文件的乙.
我想合并这两个文件,保持文件 B 相同,添加一个基于两个文件之间相同字段的新列,以及文件 A 的第 1 列和文件 B 的第 2 列之间的部分匹配。
通过部分匹配,我的意思是这样的:
| File A (column 1) | File B (column 2) | A=B? |
|---|---|---|
| A | A? | True |
| A | Asd | True |
| B | B | True |
| C | c | True |
| C | CA | True |
| D | A | False |
如果有价值观与文件 A 中的第 1 列和第 2 列相同,它们必须是添加到文件 B由;
档案 A
A\2022.10.10\注意
A\2022.10.10\注b
B\2022.10.14\注c
A\2022.10.14\注d
C\2022.10.15\注e
文件 B
2022.10.10\A?
2022.10.14\B?
2022.10.14\a
2022.10.15\C
2022.10.15\D
期望的输出
2022.10.10\A?\注a;注b\
2022.10.14\B?\注c\
2022.10.14\a\注d\
2022.10.15\C\注e\
2022.10.15\D\
我怎样才能用 awk 做到这一点?
【问题讨论】:
-
为什么文件 B 中的“note d”没有与“note a”和“note b”合并,即为什么“A”==“A?”但在所需的输出中不是“A”==“a”,但在表中说明“C”==“c”是真的?您能否解释匹配是否区分大小写,这意味着部分匹配是否会发生在两个文件列的大写值上? aka 是
upper(file2_col2_value).startswith(upper(file1_col1_value)的标准吗? -
记录是否定义为每个文件中的行位置或日期字段?
-
@LarsFischer 如果以令人困惑的方式解释,我深表歉意。我会尽量说得更清楚。是的,这两个文件都区分大小写。仅当起点相同时才会发生部分匹配。例如:[FileA = US/2022.10.22/note a] [FileB = 2022.10.22/USA] 然后是 [desired output = 2022.10.22/USA/note a] 因为文件 A 的第 1 列包含在第 2 列中文件 B 并且它们都以完全相同的方式开始。这也是为什么将文件 A(注 a)的第 3 列添加到文件 B 的原因。
-
@Forky考虑到所需的输出:为什么文件A的“A\2022.10.14\note d”行的“note d”和键“A”没有出现在同样属于“note a;note b”之后的所需输出中键“A”?两个文件中看起来像日期的列是怎么回事?