我有以下问题:
有一个文件,制表符分隔:
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建议。谢谢你的帮助。
答案 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)
只需cut
和paste
:
$ 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