我有两个文件:
归档一个
,air,rode,hand,man,chip,dog
clock,,,,,,
mind,,,,,,
finger,,,,,,
tuna,,,,,,
文件二
mind,air,rode
clock,hand,man,dog
finger,air,rode,hand,dog
tuna,chip,dog
desk,chip,hand,
move,dog,air,rode
正在发生的事情是文件2中不在第一列中的所有唯一字符串都已转换为文件1的第一行。此外,每个文件的第一列都有一组字符串,文件1的第一列中的每个字符串都存在于文件2的第一列中,但不是文件2的第一列中的每个字符串都存在于第一列中。文件1.我想要做的是使用这两个文件,以便如果文件1的第1行中的字符串存在于文件2的任何行中,则对于两个文件的第一列中的匹配字符串,则一个是打印,否则打印零
所以输出结果为:
,air,rode,hand,man,chip,dog
clock,0,0,1,1,0,1
mind,1,1,0,0,0,0
finger,1,1,1,0,0,1
tuna,0,0,0,0,1,1
答案 0 :(得分:1)
此脚本应完成大部分任务,但订单将在第二个文件中指定
NR == 1 { # grab first line from file 1
n = split($0, cols, ",") # n is the number of fields
print $0
next
}
FNR == NR { # grab required row keys from file 1
keys[$1] = 1
}
FNR != NR && $1 in keys { # process file 2 for the keys
for (i = 2; i <= NF; i++) { # construct a map for the given associations
map[$1, $i] = 1
}
line = $1 # construct line, starting with key
for (i = 2; i <= n; i++) {
v = ($1, cols[i]) in map # does the mapping exist?
line = line FS v # add the value to line separated with FS
}
print line # print line
}
$ awk -F, -f script.awk file1.txt file2.txt
将给出
,air,rode,hand,man,chip,dog
mind,1,1,0,0,0,0
clock,0,0,1,1,0,1
finger,1,1,1,0,0,1
tuna,0,0,0,0,1,1
如果需要由文件1指定订单,则可以将行放在数组中并在END块中打印。