フィールド抽出と各行の発生回数

フィールド抽出と各行の発生回数

私はこのファイルを持っています:

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

答え1

この試み:

$ 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

これはフィールド区切り文字として使用されるため、', '行がこの文字の組み合わせで終わる場合、最後のフィールドは空白と見なされます。これはあなたにとって極端な状況かもしれません。その場合は、このソリューションと他のソリューションを調整できるように言及してください。

答え2

awk -F "," '{print $4}'"{o=gsub(/', '/,$0);print o,NR}" filename |sed -e  "N;s/\n/|/g" -e "s/'//g"

出力

 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

関連情報