【发布时间】:2012-01-13 00:36:12
【问题描述】:
我想在 bash 中使用一个公共列连接两个文件。我想保留两个文件中所有可配对和不可配对的行。不幸的是,使用join 我只能从一个文件中保存不可配对的字段,例如。 join -1 1 -2 2 -a1 -t" ".
我还想保留两个文件中重复条目(在连接列中)的所有配对。
IE。如果 file1 是
x id1 a b
x id1 c d
x id1 d f
x id2 c x
x id3 f v
第二个文件是
id1 df cf
id1 ds dg
id2 cv df
id2 as ds
id3 cf cg
生成的文件应该是:
x id1 a b df cf
x id1 a b ds dg
x id1 c d df cf
x id1 c d ds dg
x id1 d f df cf
x id1 d f ds dg
x id2 c x cv df
x id2 c x as ds
x id3 f v cf cg
这就是为什么我总是使用 SAS 在对适当的列进行排序后进行此类连接。
data x;merge file1 file2;by common_column;run;
它运行良好,但
1. 因为我大部分时间都使用 Ubuntu,所以我必须切换到 Windows 来合并 SAS 中的数据。
2.最重要的是,SAS 可以截断过长的数据条目。
这就是为什么我更喜欢在 bash 中加入我的文件,但我不知道合适的命令。
有人可以帮助我,或指导我找到适当的资源吗?
【问题讨论】:
-
SAS 的最大可变长度为 32767 个字符。因此,如果您遇到截断问题并且您的文件没有比这更宽,那么就会出现其他问题。您可能需要将
lrecl=32767语句添加到您的文件名或 infile 语句中。 -
我使用了导入向导,在其中可以指定“猜测行数”的字段,SAS 在导入期间扫描这些行并根据找到的最长记录分配变量的长度。我会尝试使用代码和您的建议导入。