Awk

讀取兩個匹配單詞之間的文本,比較並寫入另一個文件

  • August 21, 2018

我正在編寫 Unix shell 腳本,我需要將輸出寫入另一個文件。

我有一個日誌文件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

但由於缺少線條,它給了我一些錯誤的結果。

我認為沒有一些命令可以輕鬆修改此問題的輸入文件。

我沒有測試所有極端情況,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

引用自:https://unix.stackexchange.com/questions/306396