csv - 比较 csv 文件和提取列时输出 csv 的问题
问题描述
我正在尝试根据它们的第一个比较两个 csv 文件,并将文件 1 的前两列和文件 2 的第二列和第三列输出到新的 csv 文件
例子:
文件 1.csv
asdf123,1
adfg234,2
asdf567,3
文件2.csv
asdf123,q,w
asdf567,r,t
期望的输出
asdf123,1,q,w
adfg234,2,NA
asdf567,3,r,t
我使用了以下代码
awk -F, 'FNR==NR{a[$1]=$0;next};{if (i in a) {print a[$1] "," $2} else {print a[$1] "," "NA"}}' file1.csv file2.csv > output.csv
但是,else 之后的命令似乎不起作用,并且该位置有空行,此外,输出打印如下(中间有新行):
asdf123,1
*blank space* q,w
asdf567,3
*blank space* r,t
我是脚本新手。有人可以指导我解决这个问题。
解决方案
您的脚本中有几个错误:
$ awk -F, '
FNR==NR {
a[$1]=$0
next
}
{
if($1 in a) # no i anywhere, use $1
print a[$1] "," $2
else
print $0 "," "NA" # cant use a[$1] in this else
}' file2 file1 # file order
现在输出:
asdf123,q,w,1
adfg234,2,NA
asdf567,r,t,3
而且它与您的输出不匹配,因为文件顺序已更改,无需更多努力:
$ awk '
BEGIN {
FS=OFS=","
}
FNR==NR {
key=$1 # $0="1,2,3" key=1
$1="" # $0=",2,3"
a[key]=$0 # a[1]=",2,3"
next
}
{
if ($1 in a)
print $1,$2 a[$1]
else
print $0,"NA"
}' file2 file1
这次输出:
asdf123,1,q,w
adfg234,2,NA
asdf567,3,r,t
推荐阅读
- ios - 无法在 AVCaptureDevice 中将相机位置更改为前面
- hibernate - 提供者 org.hibernate.envers.boot.internal.EnversIntegrator 不是子类型 tomcat 8
- node.js - 将 NODE_ENV 从 package.json 传递给 Docker-compose
- json - 如何将字典格式的数据从 url 转换为 pandas 数据框?
- r - R计算每三个值的cumsum
- xampp - 如何在没有 xampp 的情况下将 localhost 附加到图像地址的本地地址
- sql - MDX 查询:一年中的月份时间维度的累积值
- javascript - X 轴在折线图中应该有一个空格 - Chart JS
- windows - 让WIN10命令行传播WSL颜色
- javascript - Socket.io & Redis - 适合 io 游戏的架构?