Bash 从另一个文件添加列
我有以下问题: 有一个以制表符分隔的文件:Bash 从另一个文件添加列,bash,perl,awk,insert,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 Numb
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的具体建议。感谢您的帮助。使用粘贴和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用于设置格式 仅限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
使用paste和vim
然后在vim中打开newfile.txt
然后做一个regex取代基,如下所示
:%s/\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)/\1\t\2\t\3\t\5\6\t\4
只需剪切并粘贴:
输出分隔符是制表符。姓氏后的空格可以通过管道连接到tr-d\。如何匹配文件中的记录或行?更新了问题,两个文件被排序,只需要混合,第二个文件的第一行在第一个文件的第一行,在名称1之后。
:%s/\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)\t\(.*\)/\1\t\2\t\3\t\5\6\t\4
$ 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