从其他文件

时间:2016-08-23 07:34:09

标签: bash perl awk insert

我有以下问题:

有一个文件,制表符分隔:

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

我知道我必须使用awk,但我只知道如何在其他人之间插入一个固定值的列,使用:

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

但是我不知道如何从另一个文件读取行并将它们存储在newvalue中以关闭上面所需的输出。我不需要特定的awk建议。谢谢你的帮助。

4 个答案:

答案 0 :(得分:5)

使用paste和awk;

user@host:/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

粘贴用于连接文件

column -t用于非常格式化;

答案 1 :(得分:2)

仅限AWK:

$ 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

答案 2 :(得分: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 \以上的管道。

答案 3 :(得分:1)

使用paste和vim

$ paste file1 file2 > newfile.txt

然后在vim中打开newfile.txt

然后按如下方式进行正则表达式替换

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