Bash
提取欄位和每行出現的次數
我有這個文件:
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
這依賴於
', '
作為欄位分隔符的使用,因此如果一行以該字元組合結尾,則最後一個欄位將被視為空。這對你來說可能是一個極端情況。如果是這樣,請提及它,以便可以調整此解決方案和其他解決方案。