ฉันมีหลายบรรทัดคล้ายกับ:
จัสมิน, เคลลีน, เปลือก; Applebees
ซาร่าห์; วอลมาร์
เฮเลนแม็กซ์แซม; Dell
หลายชื่อเหล่านี้ซ้ำ ฉันต้องหาชื่อที่ใช้ 10 อันดับแรก ฉันพยายามใช้ cut -d "," Restaurants.txt | จัดเรียง | uniq -c | เรียง -rn | หัว -n 10
ฉันมีหลายบรรทัดคล้ายกับ:
จัสมิน, เคลลีน, เปลือก; Applebees
ซาร่าห์; วอลมาร์
เฮเลนแม็กซ์แซม; Dell
หลายชื่อเหล่านี้ซ้ำ ฉันต้องหาชื่อที่ใช้ 10 อันดับแรก ฉันพยายามใช้ cut -d "," Restaurants.txt | จัดเรียง | uniq -c | เรียง -rn | หัว -n 10
คำตอบ:
เอาล่ะนี่มันไม่สวย แต่อย่างน้อยก็ใช้ได้
cat restaurants.txt | sed 's/;.*//' | tr "," "\n" | tr " " "\n" | grep -v '^$' | sort | uniq -c | sort -r
2 Sam
2 Max
1 Shelly
1 Sarah
1 Kellyn
1 Jasmine
1 Helen
คำอธิบาย:
sed 's/;.*//'
ลบข้อความทั้งหมดหลังจากเครื่องหมายอัฒภาคเช่น (; Applebees)
tr "," "\n"
uniq ใช้งานได้เพียงหนึ่งรายการต่อบรรทัดดังนั้นแทนที่เครื่องหมายจุลภาคด้วยบรรทัดใหม่
tr " " "\n"
ล้างช่องว่างเพิ่มเติมโดยให้สายของพวกเขา (ไม่จำเป็น)
grep -v '^$'
ลบบรรทัดว่างทั้งหมด
sort
ทุกประเภท
uniq -c
นับซ้ำ
sort -f
จัดเรียงตามลำดับมากไปน้อย