相关疑难解决方法(0)

bash 从其他文件中添加/追加新列

我有一列的 name.txt 文件,例如

A
B
C
D
E
F
Run Code Online (Sandbox Code Playgroud)

然后我有很多文件,egxtxt, y.txt 和 z.txt

x.txt 有

A 1
C 3
D 2
Run Code Online (Sandbox Code Playgroud)

y.txt 有

A 1
B 4
E 3
Run Code Online (Sandbox Code Playgroud)

z.txt 有

B 2
D 2
F 1
Run Code Online (Sandbox Code Playgroud)

理想的输出是(如果没有映射就填0)

A 1 1 0
B 0 4 2
C 3 0 0
D 2 0 2
E 0 3 0
F 0 0 1
Run Code Online (Sandbox Code Playgroud)

可以用bash制作吗?(也许是 awk?)
非常感谢!!!


第一次编辑 - 我的尝试性工作
由于我对 bash 还很陌生,所以我真的很难用 awk 找出可能的解决方案。我更熟悉R,可以通过

namematrix[namematrix[,1]==xmatrix[,1],]
Run Code Online (Sandbox Code Playgroud)

总而言之,我真的很感谢下面的帮助,帮助我更多地了解awkjoin


第二次编辑 …

awk gnu-parallel

18
推荐指数
3
解决办法
285
查看次数

如何使用Unix连接获取外连接中的所有字段?

假设我有两个文件,en.csv并且sp.csv,每个都包含正好两个逗号分隔的记录:

en.csv:

1,dog,red,car
3,cat,white,boat
Run Code Online (Sandbox Code Playgroud)

sp.csv:

2,conejo,gris,tren
3,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

如果我执行

join -t, -a 1 -a 2 -e MISSING en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

1,dog,red,car
2,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

请注意,所有缺少的字段都已折叠.要获得"正确的"全外连接,我需要指定一种格式; 从而

join -t, -a 1 -a 2 -e MISSING -o 0,1.2,1.3,1.4,2.2,2.3,2.4 en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

产量

1,dog,red,car,MISSING,MISSING,MISSING
2,MISSING,MISSING,MISSING,conejo,gris,tren
3,cat,white,boat,gato,blanco,bote
Run Code Online (Sandbox Code Playgroud)

这种方式产生完全外连接的一个缺点是一个需要明确指定了决赛桌,这可能不容易编程的应用(如连接表的身份只有在运行时是已知的)做的格式.

最近版本的GNU join通过支持特殊格式消除了这个缺点auto.因此,join上面的最后一个命令的这种版本可以被更普遍的替换

join -t, -a 1 -a 2 -e MISSING -o auto en.csv sp.csv
Run Code Online (Sandbox Code Playgroud)

如何join在不支持该-o auto选项的版本中实现同样的效果?


背景和细节

我有一个Unix shell(zsh)脚本,用于处理多个CSV平面文件,并通过广泛使用GNU join的'-o auto'选项来实现.我需要修改这个脚本,以便它可以在可用 …

unix shell join gnu gnu-coreutils

10
推荐指数
1
解决办法
7939
查看次数

标签 统计

awk ×1

gnu ×1

gnu-coreutils ×1

gnu-parallel ×1

join ×1

shell ×1

unix ×1