AWK关联两个文件出现多余换行的原因排查与解决
AWK关联文件出现多余换行的问题分析及解决
待关联文件信息
file1(字段:姓名\t年龄):
Bill 25 John 24 Mary 21
file2(字段:姓名\t婚姻状态):
Bill divorced Glenn married John married Mary single
预期关联结果
(字段:姓名\t年龄\t婚姻状态):
Bill 25 divorced John 24 married Mary 21 single
实际运行结果
婚姻状态被强制换行到下一行:
Bill 25 divorced John 24 married Mary 21 single
使用的AWK程序
awk 'BEGIN { OFS = "\t" } NR == FNR { a[$1] = ($1 in a? a[$1] OFS : "")$2; next } $1 in a { $0 = $0 OFS a[$1]; delete a[$1]; print }' file2 file1 > joined_file1_file2
问题原因与解决
问题根源在于文件的换行格式:Windows系统创建的文件,每行末尾会添加<cr><newline>(回车符+换行符)组合,AWK处理时会将<cr>包含到$2的取值中。当输出数组存储的a[$1]时,隐藏的<cr>会触发换行,导致婚姻状态被单独放到下一行。
解决方法:通过十六进制编辑器移除文件中所有的<cr>字符,统一使用Unix风格的<newline>换行格式,程序即可输出符合预期的关联结果。
内容的提问来源于stack exchange,提问作者Roger Costello
相关产品推荐
相关产品推荐

