2

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

2番目の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
{
  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 に答える
0

-fオプションを間違った方法で使用している可能性があります

次に例を示します。

file1:

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,...
于 2013-01-11T16:27:37.543 に答える