我有一些\n
结束文字:
她走路,美丽,就像夜晚一样 无云的气候和星空的天空 黑暗和明亮的一切都是最好的 在她的方面和她的眼睛相遇
我想找到哪一行的最大数量为,
并打印该行。
例如,上面的文本应该为
她走路,美丽,像夜晚一样
因为它有2个(所有行中最多)逗号。
我试过了:
cat p.txt | grep ','
但不知道现在去哪里。
答案 0 :(得分:6)
您可以使用awk
:
awk -F, -vmax=0 ' NF > max { max_line = $0; max = NF; } END { print max_line; }' < poem.txt
请注意,如果max不是唯一的,那么选择第一个具有最大计数。
答案 1 :(得分:3)
试试这个
awk '-F,' '{if (NF > maxFlds) {maxFlds=NF; maxRec=$0}} ; END {print maxRec}' poem
输出
She walks, in beauty, like the night
Awk使用'Fields',-F表示使用','来分隔字段。 (F的默认值是相邻的空格,(空格和制表符))
NF表示字段数(在当前记录中)。所以我们使用逻辑来查找具有最大字段数的记录,捕获行'$ 0'的值,在END,我们打印出具有最多字段的行。
未定义如果2行具有相同的最大逗号数,将会发生什么; - )
我希望这会有所帮助。
答案 2 :(得分:0)
FatalError的基于FS的解决方案很不错。我能想到的另一种方法是从行中删除非逗号字符,然后计算它的长度:
[ghoti@pc ~]$ awk '{t=$0; gsub(/[^,]/,""); print length($0), t;}' poem
2 She walks, in beauty, like the night
1 Of cloudless climes, and starry skies
1 And all that's best, of dark and bright
1 Meet in her aspect, and her eyes
[ghoti@pc ~]$
现在我们只需要跟踪它:
[ghoti@pc ~]$ awk '{t=$0;gsub(/[^,]/,"");} length($0)>max{max=length($0);line=t} END{print line;}' poem
She walks, in beauty, like the night
[ghoti@pc ~]$
答案 3 :(得分:0)
Pure Bash:
declare ln=0 # actual line number
declare maxcomma=0 # max number of commas seen
declare maxline='' # corresponding line
while read line ; do
commas="${line//[^,]/}" # remove all non-commas
if [ ${#commas} -gt $maxcomma ] ; then
maxcomma=${#commas}
maxline="$line"
fi
((ln++))
done < "poem.txt"
echo "${maxline}"