tob*_*obi 4 linux bash text-processing
假设我有 2 个文件,每个文件都包含以 'b' 字符开头的行,我只想按照它们出现在第一个文件中的相同顺序合并这些行。
第一个文件 (1.txt)
b 12 32
b 23 43
b 23 63
Run Code Online (Sandbox Code Playgroud)
第二个文件 (2.txt)
a 1322
c 233
g 23324
s 24352
b
h vd2 3f4g
a 2t42
c 34536
g h3443e
s 24h455
b
h 3434gggdfbv4
a 423gwg
c f24bv
g 34g 45h
s 4zth5
b
h 3456zh543
Run Code Online (Sandbox Code Playgroud)
您可以看到,在第二个文件中,以 'b' 字符开头的行不包含更多信息,而在第一个文件中,我的行仅以 'b' 开头,后跟一些整数值。
我现在需要的是从第一个文件中获取整数并将它们放入第二个文件 'b' 行的东西,就像出现在第一个文件中的一样。所以第二个文件最终应该是这样的:
合并文件 (3.txt)
a 1322
c 233
g 23324
s 24352
b 12 32
h vd2 3f4g
a 2t42
c 34536
g h3443e
s 24h455
b 23 43
h 3434gggdfbv4
a 423gwg
c f24bv
g 34g 45h
s 4zth5
b 23 63
h 3456zh543
Run Code Online (Sandbox Code Playgroud)
join命令似乎能够做我想做的事,但我找不到一种方法来告诉它只在匹配前导 'b' 字符的行上工作。我还考虑过遍历文件 1 以获取与模式 '^b' 匹配的行号,然后使用它们替换文件 2 中匹配模式 '^b' 的行,但我再次找不到可行的解决方案。有没有人想用单行脚本或简短的 bash 脚本来完成我的任务?
使用 GNU sed:
sed -e '/^b/{R 1.txt' -e 'd}' 2.txt
Run Code Online (Sandbox Code Playgroud)
如果要2.txt
“就地”编辑文件,请添加sed
's option -i
。