【发布时间】:2012-04-19 18:05:08
【问题描述】:
我有两个 CSV 文件,它们使用 @ 来划分每一列。第一个文件(file1.csv)有两列:
cat @ eats fish
spider @ eats insects
第二个文件(file2.csv)有四列:
info @ cat @ info @ info
info @ spider @ info @ info
info @ rabbit @ info @ info
我需要将第一个文件第二列的信息添加到第二个文件的新列中,以防第一个文件的第一列和第二个文件的第二列的详细信息匹配,例如,上面的结果会变成这样:
info @ cat @ info @ info @ eats fish
info @ spider @ info @ info @ eats insects
info @ rabbit @ info @ info @
如上所示,由于第一个文件不包含有关兔子的信息,因此在第二个文件的最后一行添加了一个新的空列。
到目前为止,我知道该怎么做:
while read line 可用于循环浏览第二个文件中的行,例如:
while read line
do
(commands)
done < file2.csv
可以使用awk -F "@*" '{print $n}' 访问来自特定列的数据,其中n 是列号。
while read line
do
columntwo=$(echo $line | awk -F "@*" '{print $2})
while read line
do
columnone=$(echo $line | awk -F "@*" '{print $1})
if [ “$columnone” == “$columntwo” ]
then
(commands)
fi
done < file1.csv
done < file2.csv
我的方法似乎效率低下,我不确定如何使用将file1.csv1 的第二列中的数据添加到file2.csv 的新列中。
-
file1.csv1的第 1 列和file2.csv的第 2 列中的项目对于这些文件是唯一的。这些文件中没有重复的条目。 - 即使某些列是空的,生成的文件的每一行也应该正好有 5 列。
- 该文件包含大量来自各种语言的 UTF-8 字符。
-
@周围有空格,但如果这导致脚本出现问题,我可以将其删除。
如何将第一个文件中的数据添加到第二个文件中的数据中?
【问题讨论】:
-
匹配的行在两个文件中的顺序相同?
-
写一个python脚本会不会更容易,例如,将两个文件读入可以轻松智能地搜索和修改的数据结构,然后将结果写入新文件?跨度>
-
为什么要 bash?您已经涉及 awk,那么为什么不直接使用真正的语言呢?
-
两个文件中匹配的行顺序不同。有些行也可能包含类似的内容,例如“@tree@”和“@tree frog@”,但只有完全匹配的行才被认为是匹配的。
-
如果 BASH 不适合这种任务,我已经添加了一些其他语言,这些语言已经安装在我的系统上。
标签: ruby perl bash csv python-2.7