0

2つのtxtファイルがあります

ファイル 1

vol12     
abc_xyz     
vmfs_unix
vol5
vol4
titan6lr_blr

ファイル 2

vol12 ,cs_rvl      
vol12 ,cvs_rvl     
vol12 ,svn_rvl     
vol12 ,swarch      
abc_xyz ,abc_xyz 
def6g ,def6g  
vmfs_unix ,vmfs_unix
vol5 ,images
vol4 ,svn_blr
vol4 ,home4

ファイル 1 の vol12、vol5、vol4 を、ファイル 2 の列 2 にある対応する値に置き換える必要があります。出力は次のようになります。

cs_rvl      
cvs_rvl     
svn_rvl     
swarch 
abc_xyz     
vmfs_unix
images
svn_blr
home4
titan6lr_blr
4

3 に答える 3

0

ここに別のバージョンがあります:

#!/bin/bash

 arr=$(grep -v "^$" $1)
 echo -n "" > $1
 for match in ${arr}
 {
    i=$(grep ^$i -c $2)
    if [ $i -eq 0 ]
    then
            echo $match >> $1
    else
            grep ^$match $2 | cut -d "," -f2  >> $1
    fi
}

次のようにスクリプトを実行して、file1 自体の結果を取得します。

./script.sh file1 file2

簡単な説明 : file1 の空でないすべての行を反復処理します。各行は単語になります(質問による)。次に、file2 内のそのような単語ごとにカウントします。count がゼロの場合、単語自体を出力します。それ以外の場合は、その単語に一致するすべての 2 番目の列を出力します。

于 2013-07-22T11:09:46.003 に答える
0

以下に示すように、ループを使用して file1 を読み取り、file2 から新しい値を grep します。

while read line
do
    if [[ $line =~ ^(vol12|vol5|vol4) ]]
    then
        grep "$line" file2 | cut -d, -f2
    else
        echo "$line"
    fi
done < file1

出力:

cs_rvl
cvs_rvl
svn_rvl
swarch
abc_xyz
vmfs_unix
images
svn_blr
home4
titan6lr_blr
于 2013-07-22T10:51:47.403 に答える