0

基本的に私は次のようにコマンドラインでファイルを操作しようとしました:

File1:
,1,this is some content,
,2,another content,
,3,blablabla,
,4,xxxxxxxx,
,5,yyyyyyyy,
,6,zzzzzzzzzz,
... ...



File2:
1
3
4 
5

ここで、file1のコンテンツをfile2の同じ列番号で保持したいので、出力は次のようになります。

,1,this is some content,
,3,blablabla,
,4,xxxxxxxx,
,5,yyyyyyyy,

使用comm -3 file1 file2しましたが動作しません。それから私はsedを試しましたが、うまくいきませんでした。他に便利なツールはありますか?

4

1 に答える 1

2

以下は、与えられた例で機能します-文字列のコンマの後に数字が表示されている場合は機能しません:

grep -F -f File2 File1

代替案は

join -t, -1 2 -2 1 -o 1.1, 1.2, 1.3 File1 File2

これがどのように機能するかです:

-t、`、`をターミネータと見なします
-12ファイル1の2番目の列を見てください
-21ファイル2の最初の列を見てください
-o 1.1、1.2、1.3は、ファイル1の1番目、2番目、3番目の列を出力します

これには、後続のテキストに複数のコンマがある場合、最初のコンマの後に終了するという欠点があります(「フィールド3」が最後の出力です)。

この問題を修正するには、次を使用する必要がありますxargs

join -t, -1 2 -2 1 -o 1.1, 1.2 File1 File2 | xargs -Ixx grep xx File1

説明:

-Ixxxx:次のコマンドの文字列を、前のコマンドの各出力行に置き換えます。各行に対してそのコマンドを実行します。これは、最初に一致する行が見つかることを意味します。これにより、,number,他の何にも鈍感になるはずです。

于 2013-03-13T17:18:21.423 に答える