合并两个文件,将file1中的一个字段替换为file2中的另一个字段

时间:2016-04-06 07:24:30

标签: linux sh paste cut

File1中

ANK37748|DEL37728|SRILANKA|195210290000|201209111625
CHA38228|DEL37728|SRILANKA|198410290000|201308071912
ANK37748|DEL37728|SRILANKA|199910290000|201407061815
CHA38228|DEL37728|SRILANKA|199810290000|201507062212

文件2

1952-Oct-29 12:00   
1984-Oct-29 12:00   
1999-Oct-29 12:00          
1998-Oct-29 12:00

期望的输出

ANK37748|DEL37728|SRILANKA|1952-Oct-29 12:00|201209111625
CHA38228|DEL37728|SRILANKA|1984-Oct-29 12:00|201308071912
ANK37748|DEL37728|SRILANKA|1999-Oct-29 12:00|201407061815
CHA38228|DEL37728|SRILANKA|1998-Oct-29 12:00|201507062212

什么行不通:

paste file1 file2

哪个输出(仅限第一行):

ANK37748|DEL37728|SRILANKA|195210290000|201209111625 1952-Oct-29 12:00 

我需要将 file1 的第四列替换为 file2 的第一列(也是唯一一列)。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

使用粘贴剪切,将字段分隔符设置为“|”:

paste -d \| file[12]  file1 | cut -d \| -f '-3,6,11'

输出:

ANK37748|DEL37728|SRILANKA|1952-Oct-29 12:00|201209111625
CHA38228|DEL37728|SRILANKA|1984-Oct-29 12:00|201308071912
ANK37748|DEL37728|SRILANKA|1999-Oct-29 12:00|201407061815
CHA38228|DEL37728|SRILANKA|1998-Oct-29 12:00|201507062212

注意kludge - cut 的粗鲁'-f'开关可以按顺序输出字段并跳过字段,但就像纸质电传打字一样,它无法备份!而不是像 cut -f'-3,6,5'那样明智的事情,粘贴需要传递'file1'两次,因此'11'场。

(上述工作可以在纯 Bourne shell bash awk sed 中完成,等等或这些的混合组合。)