1

2つのファイルがあります。それらの1つは、次のように数値と値のペアのセットを定義します(fileA)。

 1  asm
 2  assert
 3  bio
 4  bootasm
 5  bootmain
 6  buf
 7  cat
 8  console
 9  defs
10  echo

もう1つのファイルには、次のような一連の値の組み合わせが含まれています(fileB)。

bio types
bio defs
bio param
bio spinlock
bio buf
bootasm asm
bootasm memlayout
bootasm mmu
bootmain types
bootmain elf
bootmain x86
bootmain memlayout
cat types
cat stat
cat user

ファイルBの値をファイルAの対応する番号に置き換えるスクリプトを作成したいと思います。新しいファイルを生成するか、既存のファイルBを変更するかは関係ありません。

何か案は?ありがとう

4

3 に答える 3

4
awk 'NR==FNR{a[$2]=$1;next}{$1=a[$1];}1' fileA fileB

NR == FNR {a [$ 2] = $ 1; next} =>これは、fileAが処理されるときに当てはまります。連想配列が形成され、インデックスは2番目の列で、1番目の列が値になります。

{$ 1 = a [$ 1];} => 2番目のファイルが処理されたら、1番目の列を配列に格納されている適切な値に置き換えます。

1=>すべての行を印刷します。

于 2012-10-26T02:18:44.443 に答える
2

これはあなたのために働くかもしれません(GNU sed):

sed 's|^\s*\(\S*\)\s*\(.*\)$|/^\2\\>/s//\1/|' fileA | sed -f - fileB
于 2012-10-26T04:53:26.560 に答える
0

たとえば、fileB列1に未定義の文字列がある場合、@Guruによる解決策は機能しないことに注意してください。

fileB

...
name user
name system

出力します:

...
 user
 system

この場合の文字列「name」は切り捨てられます。すべての行が一致している場合は、正常に機能します。

于 2022-01-14T09:58:14.137 に答える