2016-03-31 1 views
1

は私がタイトル列に基づいて、第1のtxtのスプレッドシートで検索するのawkを使用しようと、それが一致する場合は、この行と第二のファイルを変更しています。awkを使用して2つのファイルを使用して置換を行うにはどうすればよいですか?

私が最初COMMを使用しようとしていたが、それは動作しません。 類似のトピックはありませんでした。誰か助けてくれますか?

FILE1

Title score atividade 
ZINC79350772 -8.435 1 
ZINC71820127 -8.371 1 
ZINC65370023 -8.265 1 
ZINC13151660 -8.203 1 

FILE2

ZINC79350772 -8.435 0 
ZINC71820127 -8.371 0 
ZINC65370023 -8.265 0 
ZINC78807290 -8.256 0 

所望の出力

ZINC79350772 -8.435 1 
ZINC71820127 -8.371 1 
ZINC65370023 -8.265 1 
ZINC78807290 -8.256 0 
+2

ようこそ、あなたのコーディングの努力を示してください。 – Cyrus

+0

私はあまり 'join'を使用していないが、私は一種の仕事にこれを得たが、' -e '0'が不足している上、ゼロバックを置きますので、それはその場しのぎだ: '-e 0 -o 1.1 1.2 2.3 -a1に参加FILE2.TXT <(SED 1D FILE1.TXT) ' –

答えて

0

awk

$ awk 'NR==FNR{a[$1]=$3;next} $1 in a{$3=a[$1]} 1' file1 file2 

ZINC79350772 -8.435 1 
ZINC71820127 -8.371 1 
ZINC65370023 -8.265 1 
ZINC78807290 -8.256 0 
+0

それも働いて、ありがとう! –

2

このテストバージョン試してみる:

(cat FILE1; printf "NEXT_FILE\n"; cat FILE2) | awk '{if ($1 ~ /NEXT_FILE/) {secondfile=1;} else if (!secondfile && NR>1) {score[$1]=$2; actividade[$1]=$3;} else if (secondfile) { if (score[$1]) {$2=score[$1]; $3=actividade[$1];} print;}}' > DESIRED_OUTPUT 

cat DESIRED_OUTPUT 
ZINC79350772 -8.435 1 
ZINC71820127 -8.371 1 
ZINC65370023 -8.265 1 
ZINC78807290 -8.256 0 
をFILE1を読みながらと actividadeが移入されスコア 有名Awk - A Tutorial and Introduction - by Bruce Barnett

連想配列に記載されるよう

それは、連想配列を使用しています。

現在のタイトル欄は、そうでなければ最初のFILE1で見つかった値が印刷され、それが印刷され、最初に遭遇した場合FILE2が、読み出されます。救助へ

+1

はそれは非常によく働いてありがとうございました!!! –

関連する問題