比较和格式化bash中2个文件的文本

时间:2014-03-27 13:29:44

标签: bash awk

我需要你的帮助。 我有两个文件,其中包含:

FILE1

print_recursive.o   print_ackermann
print_recursive.o   print_fib_upto
timeout.o   timeout
recursive.o    ackermann

FILE2

recfun.o    print_ackermann
recfun.o    print_fib_upto
print_recursive.o   timeout
recfun.o    strtoul

我需要做的是从两个文件中取第二列,找到相同的那些,(即连接它们的符号) - 抱歉我的英文不好。 然后,我需要像这样打印:

FILE2_first column -> FILE1_first column (second column_if_they_match)
example:
recfun.o -> print_recursive.o (print_ackermann)
recfun.o -> print_recursive.o (print_fib_upto)
print_recursive.o -> timeout.o (timeout)

这意味着,如果它找到相同的符号(两个文件的第2列),它将从第一列获取模块的名称并将它们一起打印。我知道我应该使用awk / grep / sed左右,但我不知道如何。

谢谢!

1 个答案:

答案 0 :(得分:2)

使用awk:

awk 'FNR==NR{a[$2]=$1;next} $2 in a{print $1, "->", a[$2], "(" $2 ")"}' f1 f2
recfun.o -> print_recursive.o (print_ackermann)
recfun.o -> print_recursive.o (print_fib_upto)
print_recursive.o -> timeout.o (timeout)