2016-09-17 3 views
-2
name1 20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50 20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113 20160816|83 20160817|57 20160818|158 20160819|61 20160820|46 20160821|1769608 20160822|2580938 20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101 20160829|96 20160830|95 20160831|89 
name2 20160801|32413 20160802|37707 20160803|32230 20160804|31711 20160805|32366 20160806|35532 20160807|36961 20160808|45423 2016089|65230 20160810|111078 20160811|74357 20160812|71196 20160813|71748 20160814|77001 20160815|91687 20160816|92076 20160817|89706 20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106 

私はファイル内にline1とline2という2行の行位置を持っています。これらの行はファイル内のどこにあっても構いませんが、各行の名前(最初の単語)に基づく検索キーワードを使用して行位置にアクセスできます。ファイル内の2行の対応する値をawkを使用して比較する

20160801はyyyymmddを意味し、 与えられた2行の日付のそれぞれに関連する値を比較する必要があります。

私はawkの初心者です。私はこれらの2つの行を同時にどのように比較するのか理解していません。

+1

私は理解していません。 1) 'name1'と' name2'はそれぞれのファイルに対して一意な値ですか?すなわち、これらのファイルのうち1つ以上がファイルですか?ファイル1のname1とファイル2のname2を探し、各行の日付文字列を比較するだけですか? – dawg

+0

名前1の名前2はファイル全体で一意になります。各行は31日間です。次の日は、その日のパイプセパレーター値です。私は両方の行の日の対応する値を比較する必要があります。各行には31日分の月があります。日付とその位置はファイル内で同じです – joe

+1

とは何ですか?期待される成果は? – karakfa

答えて

0

あなたの質問は完全ではありません。おそらく最初のステップは、1)私が解決しようとしている問題は何かを明確に明言することです。 2)どのツールやデータを解決する必要がありますか?

あなたの質問(問題文が明確に表現されていないので)私が提供できる固有の唯一のヒント

はこれらです:

  1. のawkでは、あなたはあるテストFNR==NRを使用して、2つの異なるファイルを比較することができます最初のファイルでのみ真です。

  2. あなたはその区切り文字にフィールドセパレータを設定することによって、awkでは、区切り文字で分割することができ、そのパターン

  3. で始まる行を意味し、フォーム/^name1/の正規表現を使ってキーワードを見つけることができます - - この場合、私はそれが|のように聞こえるが、それらのフィールドの中の空白で区切られたフィールドも比較しているのだろうか?

  4. 最初の行のデータを保存し、もう1つのファイルの2行目のデータと比較すると、「比較」という意味を明確にすることができます。 (私は明確にするため、最初のフィールドを印刷しています)

    $ awk -F"|" '/^name/ && FNR==NR {print $1}' f1.txt f2.txt 
    name1 20160801 
    $ awk -F"|" '/^name/ && FNR<NR {print $1}' f1.txt f2.txt 
    name2 20160801 
    

    $ cat /tmp/f1.txt 
    name1 20160801|76 20160802|67 20160803|49 20160804|35 20160805|55 20160806|76 20160807|77 20160808|70 2016089|50 20160810|75 20160811|97 20160812|90 20160813|87 20160814|99 20160815|113 20160816|83 20160817|57 20160818|158 20160819|61 20160820|46 20160821|1769608 20160822|2580938 20160823|436093 20160824|75 20160825|57 20160826|70 20160827|97 20160828|101 20160829|96 20160830|95 20160831|89 
    $ cat /tmp/f2.txt 
    name2 20160801|32413 20160802|37707 20160803|32230 20160804|31711 20160805|32366 20160806|35532 20160807|36961 20160808|45423 2016089|65230 20160810|111078 20160811|74357 20160812|71196 20160813|71748 20160814|77001 20160815|91687 20160816|92076 20160817|89706 20160818|126690 20160819|168587 20160820|207128 20160821|221440 20160822|234594 20160823|200963 20160824|165231 20160825|139600 20160826|145483 20160827|209013 20160828|228550 20160829|223712 20160830|217959 20160831|169106 
    

    あなたはそうのような問題の行を見つけることができます与えられた

ことのまとめ、

それを使って比較してください。最初の配列を連想配列に保存し、見つかった場合は2番目の配列を比較します。

関連する問題