Score:0

bash: จัดเรียงไฟล์ตามตัวเลขที่อยู่ภายใน

ธง us

ฉันต้องการสร้างไฟล์ .txt 100 ไฟล์โดยมีหมายเลขสุ่มในแต่ละไฟล์จากนั้นฉันต้องเปลี่ยนชื่อไฟล์เพื่อให้ชื่อไฟล์ถูกตั้งชื่อตั้งแต่ 1.txt ถึง 100.txt ตามลำดับจากน้อยไปหามากตามค่าที่เก็บไว้ในแต่ละไฟล์ ไฟล์ชื่อ 1.txt ควรมีจำนวนน้อยที่สุดที่เก็บไว้ในนั้น และไฟล์ชื่อ 100.txt ควรมีจำนวนมากที่สุดที่เก็บไว้ในนั้น

ฉันลองรหัสนี้:

#!/bin/bash
สำหรับฉันใน $(seq 1 100)
ทำ
echo $RANDOM > ${i}.txt
เสร็จแล้ว
แมว *.txt | เรียงลำดับ
us flag
ฉันทดสอบสคริปต์ล่าสุดแล้ว แต่ไฟล์ไม่มีชื่อตั้งแต่ 1.txt ถึง 100.txt ฉันทำผิดพลาดหรือไม่
karel avatar
sa flag
ขอขอบคุณที่ชี้แจงคำถามของคุณ ฉันได้แก้ไขสคริปต์ล่าสุด เพื่อให้ไฟล์เอาต์พุตมีชื่อตั้งแต่ 1.txt ถึง 100.txt ตามที่คุณร้องขอ
us flag
ขอบคุณที่ช่วยฉันออกมา!
karel avatar
sa flag
คำถามของคุณชัดเจนขึ้นมากแล้ว
Score:0
ธง ar

ขั้นแรก คุณสามารถสร้างตัวเลขสุ่มทั้งหมดของคุณ จากนั้นจัดเรียงก่อนที่จะเขียนลงในไฟล์:

สำหรับฉันใน {1..100}; ทำ
    สะท้อน $RANDOM
เสร็จแล้ว \
| จัดเรียง -n \
| ขณะอ่าน n; ทำ
     (( x+=1 ))
     echo "$n" > "$x.txt"
  เสร็จแล้ว

หรือเหมือนกับซับใน:

สำหรับฉันใน {1..100}; ทำ echo $RANDOM; เสร็จแล้ว | จัดเรียง -n | ขณะอ่าน n; ทำ (( x+=1 )); echo "$n" > "$x.txt"; เสร็จแล้ว

โปรดทราบว่าจะต้องมี เรียงลำดับ เรียงสตริงของตัวเลขตามตัวเลข คุณต้องใช้มัน --ตัวเลข-เรียง (หรือ -น) ตัวเลือก.

Score:0
ธง sa

สร้างไดเร็กทอรีใหม่และตั้งชื่อไดเร็กทอรีตามชื่อที่คุณเลือก เปลี่ยนไดเร็กทอรีด้วย ซีดี ไปยังไดเร็กทอรีใหม่ที่คุณสร้างขึ้น เพื่อให้ไฟล์ทั้งหมดที่สร้างโดยเชลล์สคริปต์จะถูกสร้างขึ้นภายในไดเร็กทอรีใหม่ และเฉพาะไฟล์ที่สร้างขึ้นใหม่เหล่านี้เท่านั้นที่จะถูกเปลี่ยนชื่อ จากนั้นเรียกใช้เชลล์สคริปต์ต่อไปนี้

#!/bin/bash
สำหรับฉันใน $(seq 1 100)
ทำ
echo $RANDOM > ${i}.txt # ใส่ตัวเลขสุ่มในแต่ละไฟล์
mv ${i}.txt $(head -1 ${i}.txt).txt # เปลี่ยนชื่อไฟล์
เสร็จแล้ว
ls *.txt | sort -n # เรียงลำดับไฟล์จากน้อยไปหามาก

คำถามของคุณไม่ชัดเจนเพราะฉันสามารถเปลี่ยนชื่อไฟล์ตามลำดับจากน้อยไปหามากด้วยชื่อใหม่ที่มีตั้งแต่ 1.txt ถึง 100.txt หากนั่นคือวิธีที่คุณต้องการเปลี่ยนชื่อไฟล์ให้ใช้เชลล์สคริปต์นี้แทน

#!/bin/bash
สำหรับฉันใน $(seq 1 100)
ทำ
echo $RANDOM > ${i}.txt # ใส่ตัวเลขสุ่มในแต่ละไฟล์
mv ${i}.txt $(head -1 ${i}.txt).txt # เปลี่ยนชื่อไฟล์
เสร็จแล้ว
# ls *.txt | sort -n # ฉันแสดงความคิดเห็นในบรรทัดนี้และเพิ่มบรรทัดใหม่หลังจากนั้น
ฉัน=1; สำหรับชื่อไฟล์ใน `ls *.txt | เรียง -n`; ทำ mv "$filename" "$((i++)).txt"; เสร็จแล้ว
Doug Smythies avatar
gn flag
คำถามดูเหมือนเป็นคำถามประเภทการบ้าน ดังนั้นฉันจึงคิดว่าเราไม่ควรให้คำตอบ
karel avatar
sa flag
@DougSmythies ฉันเห็นใจคุณ แต่ฉันทามติของชุมชน Ask Ubuntu ในช่วง 10 ปีที่ผ่านมาคือสคริปต์ bash shell อยู่ในหัวข้อที่ Ask Ubuntu และการกำหนดการเขียนโปรแกรมในภาษาโปรแกรมอื่น ๆ รวมถึงการบ้านในภาษาโปรแกรมอื่น ๆ อยู่นอกหัวข้อ การขอความช่วยเหลือเพียงอย่างเดียวของคุณคือการส่งคำขอสำหรับการอภิปรายเกี่ยวกับปัญหานี้เพื่อถาม Ubuntu Meta ฉันยินดีที่จะยอมรับความเห็นพ้องต้องกันของชุมชน Ask Ubuntu ในเรื่องนี้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา