2015-02-24 86 views
0

我的输入文件:价值观AWK失踪

file1 
231|35000 
234|15000 
242|60000 
254|12313 
345|50000 
435|24300 

file2 
1|madhan|retl|231|tcs 
2|vaisakh|retl|234|tcs 
4|sam|ins|242|infy 
5|tina|bfs|254|tcs 
3|ram|bfs|345|infy 
6|subbu|bfs|435|infy 

输出继电器: 试图让

col1 , col2 of file1 and col2 of file2 based on common column(col1 of file1 and col4 of file2) 

我的代码:

awk 'BEGIN { FS="|";} NR==FNR{a[$1] = $2;next} ($4 in a) {print $2 "|" $4 "|" a[$1]} ' file_1 file_2 

O/PI有:

madhan|231| 
vaisakh|234| 
sam|242| 
tina|254| 
ram|345| 
subbu|435| 

你能帮为什么最后关口即将空格

回答

0

试着这么做:

join -t '|' -1 1 -2 4 file1 file2 | awk -F'|' '{print $1 "|" $2 "|" $4}' 

加入现场1从file1和现场4文件2和提取字段,你需要用awk什么。

0

这应该做:

awk -F\| 'FNR==NR {a[$1]=$0;next} {for (i in a) if (i==$4) print a[i]"|"$2}' file1 file2 
231|35000|madhan 
234|15000|vaisakh 
242|60000|sam 
254|12313|tina 
345|50000|ram 
435|24300|subbu 

它使用第一字段作为索引存储在阵列afile1
然后它在file2中测试第一个文件中的第四个字段的索引。
如果它们相同,则从file1打印数据,从file2打印第二个字段。

+0

感谢Jotne。但是如果我的输入文件有数百万条记录,awk的工作效率会如何? – Madan 2015-02-24 09:43:00

+0

@Madan'awk'可以工作,但你需要测试它看看需要多长时间。 – Jotne 2015-02-24 10:07:06

0

由于该键不存在于数组中,因此它变为空白。您正在将file1的第一列存储为file2的第四列的键。

$ awk ' 
    BEGIN { FS=OFS="|" } 
    NR==FNR { a[$1]=$2; next } 
    ($4 in a) { print $2, $4, a[$4] } 
' file1 file2 
madhan|231|35000 
vaisakh|234|15000 
sam|242|60000 
tina|254|12313 
ram|345|50000 
subbu|435|24300 

如果您需要在您的要求Ø文陈述的次序/ P则

$ awk 'BEGIN {FS=OFS="|"}NR==FNR{a[$4]=$2;next} ($1 in a) {print $0, a[$1]}' file2 file1 
231|35000|madhan 
234|15000|vaisakh 
242|60000|sam 
254|12313|tina 
345|50000|ram 
435|24300|subbu