awk中缺少值

时间:2015-02-24 06:10:23

标签: shell unix 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

我得到了:

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

你能帮助为什么最后一个电话以空格出现

3 个答案:

答案 0 :(得分:0)

尝试类似:

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

从file1上的字段1和文件2上的字段4加入,并使用awk提取所需的字段。

答案 1 :(得分: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

使用第一个字段作为索引,将file1存储在数组a中 然后它在第一个文件中对file2中的第四个字段测试索引 如果它们相同,则打印来自file1的{​​{1}}和第二个字段的数据。

答案 2 :(得分:0)

它是空白的,因为数组中不存在该键。您正在存储file1的第一列作为键,它是file2的第4列。

$ 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

如果您需要所要求的O / 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