2つのファイルを比較し、列が同じ場合は、次の列を値に置き換えます。

2つのファイルを比較し、列が同じ場合は、次の列を値に置き換えます。

他のファイルと比較してファイルの列値を変更するには?

ファイルが2つあります。テスト1.csvそしてtest2.csvempdep;列を交換する必要がありますテスト1.csvその値が次のような場合「シンボル*」。 2番目のファイルtest2.csv値を置き換えるのに必要な値があります。「シンボル*」

注:私は以下を使用していますkshテスト1.csv約2,048,576行があります。test2.csv行は10,000です。

テスト1.csv

empname,place,empdep
aaaa,city1,001
bbbb,city2,sign-1
dddd,city1,005
ffff,city5,sign-2
hhhh,city7,sign-1

test2.csv

empname,new
aaaa,001
bbbb,002
cccc,003
dddd,005
eeee,006
ffff,007
gggg,008
hhhh,009

予想される結果:

empname,place,empdep
aaaa,city1,001
bbbb,city2,002
dddd,city1,005
ffff,city5,007
hhhh,city7,009

ベストアンサー1

そしてawk

awk '
  BEGIN{ FS=OFS="," } # set input/output field separator to `,`
  NR==FNR{            # if this is the first file `test2.csv`
    a[$1]=$2          # store field2 in array `a` using field1 as index
    next              # continue with next line
  } 
  $3 ~ /^sign/{       # if field3 of `test1.csv` begins with `sign`
    $3=a[$1]          # replace the field with array value (index of field1)
  }
  1                   # print the line
' test2.csv test1.csv

おすすめ記事