我正在尝试连接两个csv
已排序且带有制表符分隔符的文件。
我是该命令的新手join
,所以我不太确定如何使用它,但它似乎用空格替换文件中的每个选项卡(搞乱了对齐)。
我正在使用的命令是:
join -1 5 -2 2 -t $'\t' -o $order --header file1.csv file2.csv |
column -t > result.csv
在第一个文件中,数据按照第五名列,以及第二名第二个文件中的列。该变量$order
是一个包含不同列的简单字符串“1.1 1.2 1.3”ETC。 (28其中)。我使用的分隔符来自 SE。
你知道这是从哪里来的吗?
答案1
join
with用作分隔符的字符-t
将用于输入和输出。
问题在于column -t
您使用的后处理步骤 。它将用适当数量的空格替换制表符,以很好地对齐列。如果您想保留 输出中的制表符join
,请不要通过 传递数据column -t
。
仅用于column -t
表格数据的最终(视觉)呈现。
答案2
这是因为column -t
,表格模式会自动确定列宽并创建可读的表格输出并使用分隔输出空间并不是选项卡。要使用显式执行此操作column
,请使用其输出定界符设置标志-o
join -1 5 -2 2 -t $'\t' -o $order --header file1.csv file2.csv |
column -o '\t' > result.csv