我有两个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
答案 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
删除流程替换中的标题行。