bash - Bash 文本处理
问题描述
我有三个文件file1
:file2
和exl
. 两者file1
都有两列内容file2
。两个文件中的第一列相同。
我想使用该列加入两个文件的内容。join
使用命令很容易。但是文件有一个问题exl
:它包含一些单词,我希望join
命令忽略/删除这些单词。
有什么办法可以做到这一点,join
或者我应该使用它awk
吗?
文件1:
A la
B lb
C lc
D something
文件2:
A ba
B bb
C another
D bd
外:
something
nothing
预期结果:
A la ba
B lb bb
C lc
D bd
解决方案
gjoin -t $'\t' <(gjoin -t $'\t' -v 1 file1 exl) <(gjoin -t $'\t' -v 1 file2 exl)
(对于我的设置,安装了 GNU 工具并使用制表符分隔值的 Mac OS X;根据您的情况进行更改。)
该<(...)
构造将命令的输出设置为外部命令行可以接受作为参数的虚拟文件。
-v 1
参数的意思join
是:“打印第一个文件中不可连接的所有行”。
因此,gjoin -t $'\t' -v 1 file1 exl
将尝试将第一个文件加入排除列表,并且只打印那些不在排除列表中的文件。同样对于file2
。
然后我们将这两个负连接的输出带到真正的连接中。
推荐阅读
- delphi - 如何在 FMX Delphi 中获取仅 TrueType 字体的列表?
- javascript - 如何解决双手风琴中的 maxHeight?
- swift - 在 swift 中从字符串中替换正则表达式 \\+n
- php - Wordpress the_date(); 如何更改语言
- c# - 为什么Newtonsoft的序列化器可以创建json,而无法反序列化?
- glsl - 使用 pixi-js 在 GLSL 中进行纹理缩放
- javascript - GoJS 调整图表每个元素的大小
- html - 两个相同的html元素有不同的尺寸
- python - 查找 Xpath 对每个登录都是唯一的元素
- python - 如何在pdf中提取输入字段的x0,y0坐标