使用另一个csv或txt文件作为输入grep一个csv文件

时间:2013-01-11 16:06:18

标签: bash shell csv awk grep

我有两个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

5 个答案:

答案 0 :(得分:3)

awk -F, 'NR==FNR{a[$0];next} $1 in a' file2.csv file1.csv

答案 1 :(得分:1)

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

cut -d',' -f2- file1.csv | paste -d',' file2.csv -

答案 2 :(得分:0)

for FOO in `cat file2.csv`; do
    grep "^$FOO" file1.csv
done

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

答案 3 :(得分: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,...

file2的:

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,...

答案 4 :(得分:0)

{
  sed 1q file1.csv
  join -t, <(sed 1d file1.csv | sort) <(sed 1d file2.csv | sort)
} > newfile.csv

join要求对输入文件进行排序。我正在使用sed删除流程替换中的标题行。