2

これが私の問題です

私はいくつかのデータがあるファイル1を持っています

Var1.1   Var1.2   Var1.3
Var2.1   Var2.2   Var2.3
Var3.1   Var3.2   Var3.3

そして、上記のデータのおかげで編集したいファイル2があります

ファイル2 (1)

***pattern with Var2.1***
some text...

ファイル2(2)

***pattern with Var2.1***
Here I want to add Var2.2 and Var2.3
some text

私の最初の解決策は AWK を使用することですが、bash コマンドを含める方法がわかりません。AWK は次のようにする必要があります。

  • File2 でパターンを検索する
  • awk がそれを取得すると、awk は File1 から必要な値を返すスクリプトを呼び出します。
  • 次に、awkはFile2を編集できます

もっと単純な可能性がある場合は、遠慮なく説明してください。

ありがとうございました !

4

2 に答える 2

5

これは、awk 内から外部コマンドを実行して文字列を base64 デコードする方法です。

cmd = "/usr/bin/base64 -i -d <<< " $2 " 2>/dev/null"
while ( ( cmd | getline result ) > 0 ) { }
close(cmd)
split(result, a, "[:=,]")
name=a[2]

そこからインスピレーションを得ることができるかもしれません...

于 2012-08-31T09:22:30.217 に答える
1

目的を達成するために外部スクリプトを実行する必要はありません。短い AWK スクリプト内で完全に実行できます。

awk 'FNR == NR {arr[$1] = $2 " " $3; next} {print; for (lookup in arr) {if ($0 ~ lookup) {split(arr[lookup], a); print "Here I want to add " a[1] " and " a[2]}}}' File1 File2

説明:

  • FNR == NR {arr[$1] = $2 " " $3; next}- 最初のファイルをループし、すべての値を最初の列でインデックス付けされた配列に保存します。レコード番号は、最初のファイルのファイル レコード番号と同じです。
  • print- すべての入力行を印刷します。
  • for (lookup in arr) {if ($0 ~ lookup) {- 各配列インデックスをループして、入力行が一致するかどうかを確認します。
  • split(arr[lookup], a)- 一致したインデックスに格納されている値を一時配列に分割します。
  • print "Here I want to add " a[1] " and " a[2]- 分割の結果として得られる 2 つの値を使用して、いくつかのテキストを出力します。
于 2012-08-31T13:11:30.737 に答える