我正在使用下面的代码/命令在两个文件中查找公共数据,并在找到文件时发送输出。
awk 'FNR==NR{l[$0]=NR; next}; $0 in l{print $0, l[$0], FNR}' MF*.txt OF*.txt > F22.txt`enter code here`
但我需要你的帮助通过使用AWK,我需要在同一个文件中的两列中查找公共数据 例如,以下是包含数据的两列,需要搜索列 A 是否等于单词 CAN 然后,如果列 B 包含在 C 列中找到的某些值,则会将这些匹配项打印到单独的文件中行号和任何错误代码。
A B C
CAN 9876 45678
CAN 1234 93939
CAN 45678 9090
ABC 4567 8080
BCD 97654 9876
CAN 9090 8181
非常感谢提前。
答案 0 :(得分:0)
您可以使用以下awk
命令:
awk 'NR>1{if($1=="CAN"){lines[$2]=NR" "$0;}C[$3]=$3}END{for(i in lines){if(C[i])print lines[i]}}' input_file.txt > output_file.out
识别符合问题所述条件的行:
如果列B等于单词CAN,则需要搜索 包含在C列中找到的一些值,然后打印 这些匹配到具有行号和任何错误代码的单独文件中。
输入您的输入数据:
7 CAN 9090 8181
2 CAN 9876 45678
4 CAN 45678 9090
<强>说明:强>
NR>1
从第二行开始处理if($1=="CAN"){lines[$2]=NR" "$0;}
对于以CAN
开头的每一行,您将行的行号存储在数组中,其中键/索引是第二列的值。 C[$3]=$3
存储第3列的所有值 END{for(i in lines){if(C[i])print lines[i]}
检查存储的所有行,如果第3列中存在的值等于第2列的值,如果是这样,则输出行号和相关行
如果您要处理多个输入文件,则可以使用以下awk
命令:
awk 'FNR>1{if($1=="CAN"){lines[$2]=FILENAME" "FNR" "$0;}C[$3]=$3}END{for(i in lines){if(C[i])print lines[i]}}' MF*.txt OF*.txt > output_file.out
,其中
FNR
是每个文件中的相对位置FILENAME
是正在处理的当前文件的名称A B C
FNR>1
<强> TEST:强>