我有这个文件:
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