2016-08-23 77 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 \

相關問題