操作が必要な大きなデータベース ファイルがあります。基本的に、「|」で区切られた重複フィールドを避ける必要があります 為に:
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA1 | SAME | | blah | blah
ELIGIBLE | x2
DATA1 | SAME | | blah | blah blah
ELIGIBLE | x2
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA2 | SAME | | blah | blah
ELIGIBLE | y2
DATA2 | SAME | | blah | blah blah blah blah
ELIGIBLE | y2
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
DATA3 | SAME | | blah | blah
ELIGIBLE | z2
DATA3 | SAME | | blah | blah blah blah blah
ELIGIBLE | z2
私が使用しているコードは
BEGIN{ FS = "|" }
{
count[$1]++;
if (count[$1] == 1)
first [$1] = $0;
if (count[$1] > 1)
print first[$1]
NR==1;
}
しかし、それは私に出力を与えます:
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
DATA3 | SAME | | | blah blah
私は次のような出力を好むでしょう:
-- TITLE1 | TITLE2 |T3 |TITLE4|TITLE5
----------|----------|-----|------|---------------
--
DATA1 | SAME | | | blah blah
ELIGIBLE | x1
DATA2 | SAME | | | blah blah
ELIGIBLE | y1
DATA3 | SAME | | | blah blah
ELIGIBLE | z1
表題欄はあまり気にしませんが、データを概説したとおりに表示する必要があります。素人の説明で申し訳ありませんが、解決策を教えていただければ幸いです。Linuxコマンドラインスクリプトに関しては初心者なので、私の答えが間違っている理由を誰かが説明できれば幸いです。私は awk に限定されず、任意のコマンド ソリューションを使用できます。awkで解決策を試したかっただけです。