linux bash脚本把A和B文件中有相同ID的B文件的内容输出到文件C

bash脚本把A和B文件中有相同ID的B文件的内容输出到文件C.
A文件:
ID001.1
ID032.1
ID090.10

B文件:
XX XX XXX ID001.1 XXX
999999999999999999999999999999999999999
XX XX XXX ID055.1 XXX
6666666666666666666666666666666666666
XX XX XXX ID032.1 XXX
333333333333333333333333333333333333333

要得到C文件:
XX XX XXX ID001.1 XXX
999999999999999999999999999999999999999
XX XX XXX ID032.1 XXX
333333333333333333333333333333333333333

#!/bin/bash
awk 'NR==FNR{a[FNR]=$0} NR>FNR{for(i in a)if($0~a[i]){print;getline;print}' A B >C

NR==FNR表示当前在处理文件A,读取文件A将内容放入数组a。

NR>FNR表示当前在处理文件B。

追问

awk: cmd. line:1: NR==FNR{a[FNR]=$0} NR>FNR{for(i in a)if($0~a[i]){print;getline;print}
awk: cmd. line:1: ^ unexpected newline or end of string
其中错误 ^ 指到最后一个单引号的位置。

追答

代码搬上来的时候最后少了个大括号,再来:

awk 'NR==FNR{a[FNR]=$0} NR>FNR{for(i in a)if($0~a[i]){print;getline;print}}' A B >C

我这边执行通过,跟你要求的输出一样。 

追问

追答

我这里可以。

你先把 >C 去掉看看。

另外,你是直接拷贝粘贴我的代码的吗?你图上的单引号貌似是中文的。

追问

把 >C 去掉 之后没有任何显示。是直接复制的。
我把A,B都用vi设置“set ff=unix” 就可以了。请问如何修改这个脚本使其能处理Windows下创建的文本。请到http://zhidao.baidu.com/question/588072484.html?sort=6#answer-1472346795 一并给分。谢谢。

追答

晕,原来是文本格式问题。Windows下创建的文本请先用dos2unix转为unix格式。
修改后的脚本放到了你给的另一个链接下。

温馨提示:答案为网友推荐,仅供参考
相似回答