나는 이 파일을 가지고 있습니다 :
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를 사용하여 네 번째 필드를 추출할 수 있습니다
. 각 행의 발생 횟수를 얻으려면 다음 ', '
스크립트를 사용합니다.
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