Bash

提取欄位和每行出現的次數

  • May 26, 2022

我有這個文件:

John Green', 'Age: 32', 'State: New York', 'Total cars: 2', 'Manufacter: General Motor', 'Model: Pontiac', 'Year: 2000', 'Manufacter: Ford Motor', 'Model: Endeavour', 'Year: 2010
Peter Jones', 'Age: 20', 'State: Florida', 'Total cars: 0
Richard Smith', 'Age: 44', 'State: Illinois ', 'Total cars: 1', 'Manufacter: Toyota', 'Model: Yaris', 'Year: 2005
Brian Brown', 'Age: 42', 'State: Texas', 'Total cars: 0
Vincent Osmnod', 'Age: 39', 'State: Maryland', 'Total cars: 1', 'Manufacter: Fiat', 'Model: 500X', 'Year: 2015

我可以使用 awk 提取第 4 個欄位

,如果我想獲取', '每行的出現次數,我使用腳本:

grep -o -n "', '" file | cut -d : -f 1 | uniq -c

這個命令還給了我行數

 9 1
 3 2
 6 3
 3 4
 6 5

所以我可以單獨得到結果

我想要的輸出是:

Total cars: 2 |9 1
Total cars: 0 |3 2
Total cars: 1 |6 3
Total cars: 0 |3 4
Total cars: 1 |6 5

我試過這個腳本:

#!/bin/bash
FILENAME=$1
count=0
while read LINE
do
       OUTP1=$(awk -F"', '" '{print $4" |"}' $LINE)
       OUTP2=$(grep -o -n "', '" $LINE1 | cut -d : -f 1 | uniq -c)
       echo "$OUTP1 $OUTP2"
done < $FILENAME

它給了我這個輸出:

awk: cannot open John (No such file or directory)
      3 1
     6 2
     3 3
     6 4

嘗試這個:

$ awk -v FS="', '" '{print $4 " |"NF-1 " " NR}' file

如果您有空行file,您可能需要使用:

$ awk -v FS="', '" 'NF >= 1 {print $4 " |"NF-1 " " NR}' file
Total cars: 2 |9 1
Total cars: 0 |3 2
Total cars: 1 |6 3
Total cars: 0 |3 4
Total cars: 1 |6 5

這依賴於', '作為欄位分隔符的使用,因此如果一行以該字元組合結尾,則最後一個欄位將被視為空。這對你來說可能是一個極端情況。如果是這樣,請提及它,以便可以調整此解決方案和其他解決方案。

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