一致する2つの単語間のテキストを読み、比較して別のファイルに書き込みます。

一致する2つの単語間のテキストを読み、比較して別のファイルに書き込みます。

私はUnixシェルスクリプトを作成しており、出力を別のファイルに書き込む必要があります。

Shop.log次のログファイルがあります。

Place=hyd
Location=Abids
Shop=Bigbazar
Place=Mumbai
Location=Worli
Shop=ShoppersStop
Place=Hyd
Location=Madhapur
Place=Mumbai
Location=Thane
Shop=Adidas
Place=hyd
Location=Abids
Place=Mumbai
Shop=ShoppersStop

上記のファイルで3つのパラメータがすべて利用可能であることを確認する必要があります。そうでない場合は、そのパラメータに「N / A」値を割り当てて別のパラメータを作成する必要がありますfinal.txt

bash-4.1$ pr -ats, /home/user/Shop.log --columns 3 > final.txt

ただし、行が不足すると誤った結果が表示されます。

ベストアンサー1

この問題の入力ファイルを簡単に修正できるコマンドがないと思います。

すべての特別なケースをテストするわけではありません。sedこのコマンドは、入力の最後の行に「Place」パラメーターが含まれている場合に役立ちます。

$ sed -i -E '$ s|^(Place.*)|\1\nShop=N/A|' /home/user/Shop.log

次に、perl欠落しているパラメータを使用して「N / A」値を追加し、出力をpr

$ perl -e '@file = `cat abc.txt` ; @s = ("Place", "Location", "Shop");
> for($j=0;$j<=$#file;) {if($file[$j] !~ /^$s[$i]/){print "$s[$i]=N/A\n"}
> else {print $file[$j]; $j++} $i=($i+1)%3;}
> ' | pr -ats, --columns 3 > final.txt

$ cat final.txt
Place=hyd,Location=Abids,Shop=Bigbazar
Place=Mumbai,Location=Worli,Shop=ShoppersStop
Place=Hyd,Location=Madhapur,Shop=N/A
Place=Mumbai,Location=Thane,Shop=Adidas
Place=hyd,Location=Abids,Shop=N/A
Place=Mumbai,Location=N/A,Shop=ShoppersStop

paste -d, - - -利用も可能ですので参考にしてくださいpr -ats, --columns 3

おすすめ記事