2つのファイルのデータを比較し、必要に応じてシェル内の2番目のファイルの条件を更新する必要があります。
2セットのファイルがあります。
最初のファイルにはデータが含まれています。
NUMBER,ID
748378,9508
473738,7892
473832,7839
2番目のファイルにはデータが含まれています。
pk,Name,Number,Code
1,Michael,748378,6373
2,Rachael,747477,7473
私がしたいのは、2番目のファイルのpkが1ではなく、1番目のファイルの数が2番目のファイルの数と同じように2番目のファイルを更新してから、ファイル2 =ファイル1にコードを設定することです.の身分証明書です。
シェルでこのロジックを処理する際に問題があります。
ベストアンサー1
MS Excelはvlookup
この問題をすばやく簡単に解決できます。
Excelが機能しない場合は、awk/sed/shellを統合します。
awk -F, '{if ($1 != 1 && $1 ~ /[0-9]+/) {print "sed -i \x27s#" $3 ",[0-9]*#" $3 "," $4 "#\x27 file1.txt"}}' file2.txt | bash
Matthiasが述べたように、元の意図を正しく理解している場合は、次のようになります。
file2 の pk が 1 でない場合にのみ、file1 にリカバリが適用されます。
この場合、file2の「pk1 number748378」はfile1で見つかった唯一の一致であるため、一致はなく、pkが1の場合は修正を除外します。
私が提供した1行のコードで結果を表示するには、にif ($1 != 1
変更します。if ($1 != 2
awk/sed/bash マージガイドライン:
awk -F,
-F は、次のものを区切り文字として使用することを意味します。この場合は、次を使用します。,
if ($1 != 1 && $1 ~ /[0-9]+/)
field1 が$1
1 ではなく、field1 が数値の場合、次の awk プロシージャが適用されます。正規表現構文$1 ~ /reg_exp/
です。awk
print "sed -i \x27s#" $3 ",[0-9]*#" $3 "," $4 "#\x27 file1.txt"
file1.txtに修正を適用するコマンドを awk
印刷するために使用されます。例 NUMBER 例は file2.txt のコードです。印刷された16進コード。sed
$3
$4
\x27
awk
'
awk
デフォルトでは、file2で検索フィールド3と4を使用し、sed
generateコマンドを使用し、file1の数字を指定された結果に置き換えてからawk
(または持っている他のシェル)sed
でbash
生成されたコマンドを実行します。