ฉันมีหลายบรรทัดคล้ายกับ:
จัสมิน, เคลลีน, เปลือก; 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 จัดเรียงตามลำดับมากไปน้อย