2016-08-23 78 views
0

我有以下问题:从另一个文件将一列

存在文件,制表符分隔:

Code1 Number1 Name1 Phone1 
Code2 Number2 Name2 Phone2 
Code3 Number3 Name3 Phone3 
Code4 Number4 Name4 Phone4 

,我有一个文件:

Surname 1 
Surname 2 
Surname 3 
Surname 4 

我的期望输出是:

Code1 Number1 Name1 Surname1 Phone1 
Code1 Number1 Name1 Surname2 Phone1 
Code1 Number1 Name1 Surname3 Phone1 
Code1 Number1 Name1 Surname4 Phone1 

我知道我propably必须使用AWK这一点,但我只知道如何在其他国家之间插入一个固定值的列,使用:

awk '{ $2=$2"newvalue" print $0 }' 

,但我不知道如何读取其他文件和存储线他们以新的价值将上述所需的输出关闭。我不需要awk特定的建议。谢谢您的帮助。

+2

如何匹配文件中的记录或行? –

+0

更新了这个问题,这两个文件被排序,只需要混合,第二个文件的第一行进入第一个文件的第一行,在“名称1”之后。 – onlyf

回答

2

AWK只:使用粘贴和VIM

$ awk 'NR==FNR{a[FNR]=$1$2;next} {print $1,$2,$3,a[FNR],$4}' file2 file1 
Code1 Number1 Name1 Surname1 Phone1 
Code2 Number2 Name2 Surname2 Phone2 
Code3 Number3 Name3 Surname3 Phone3 
Code4 Number4 Name4 Surname4 Phone4 
5

用粘贴和awk;

[email protected]:/tmp$ paste file1 file2 | awk '{print $1, $2, $3, $5$6, $4}' | column -t 
Code1 Number1 Name1 Surname1 Phone1 
Code1 Number1 Name1 Surname2 Phone1 
Code1 Number1 Name1 Surname3 Phone1 
Code1 Number1 Name1 Surname4 Phone1 

膏用来连接文件

列-t用来漂亮的格式化;

1

$ paste file1 file2 > newfile.txt 

然后打开newfile.txt在vim

然后做一个正则表达式substituiton如下

:%s/\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)/\1\t\2\t\3\t\5\6\t\4 
2

只是cutpaste

$ paste <(cut -f 1-3 a) b <(cut -f 4 a) 
Code1 Number1 Name1 Surname 1  Phone1 
Code2 Number2 Name2 Surname 2  Phone2 
Code3 Number3 Name3 Surname 3  Phone3 
Code4 Number4 Name4 Surname 4  Phone4 

输出分隔符标签。 Surname之后的空格可以用上述方式处理至tr -d \

相关问题