2

我有两个 csv 文件:

第一个,我们称之为 file1.csv,有我需要的信息,它类似于:

Cell,Bitrate,Loss Ratio,Retransmitted Ratio
MI456,400,0.6,2.3,....
MI457,400,0.6,2.3,...
MI458,400,0.6,2.3,...   
.
.
.

第二个,file2.csv,有我需要从 file1 中提取的单元格子集,它是这样的:

Cell
MI400
CA500
VE600   

我希望我的输出是:

Cell,Bitrate,Loss Ratio,Retransmitted Ratio
MI400,400,0.6,2.3,....
CA500,400,0.6,2.3,...
VE600,400,0.6,2.3,...   

我试图使用:

cat file1.csv | grep -f file2.csv

或 grep -f

但没有成功,你能帮帮我吗?

我正在使用 Linux 2.6.31.2 x86_64 GNU/Linux

4

5 回答 5

3
awk -F, 'NR==FNR{a[$0];next} $1 in a' file2.csv file1.csv
于 2013-01-11T17:11:59.563 回答
1

这会将 file1.csv 中的第一列替换为 file2.csv 的内容:

cut -d',' -f2- file1.csv | paste -d',' file2.csv -
于 2013-01-11T16:15:18.137 回答
0

也许您-f以错误的方式使用该选项

这是一个例子:

文件1:

Cell,Bitrate,Loss Ratio,Retransmitted Ratio
MI456,400,0.6,2.3,....
MI457,400,0.6,2.3,...
MI458,400,0.6,2.3,...
MI465,400,0.6,2.3,...
MI477,400,0.6,2.3,...

文件2:

MI456
MI457
MI465

grep:

grep -f file2 file1
MI456,400,0.6,2.3,....
MI457,400,0.6,2.3,...
MI465,400,0.6,2.3,...
于 2013-01-11T16:27:37.543 回答
0
{
  sed 1q file1.csv
  join -t, <(sed 1d file1.csv | sort) <(sed 1d file2.csv | sort)
} > newfile.csv

join需要对输入文件进行排序。我sed用来删除进程替换中的标题行。

于 2013-01-11T16:46:03.503 回答
0
for FOO in `cat file2.csv`; do
    grep "^$FOO" file1.csv
done

如果 file2.csv 有很多行,这将非常慢。

于 2013-01-11T16:17:57.330 回答