Puncte:0

bash: sortați fișierele după un număr din interiorul lor

drapel us

Trebuie să generez 100 de fișiere .txt cu un număr aleatoriu în fiecare dintre ele.Apoi trebuie să redenumesc fișierele astfel încât numele fișierelor să fie denumite de la 1.txt la 100.txt în ordine crescătoare, în funcție de valoarea care este stocată în fiecare fișier. Fișierul numit 1.txt ar trebui să aibă cel mai mic număr stocat în el, iar fișierul numit 100.txt ar trebui să aibă cel mai mare număr stocat în el

Am incercat acest cod:

#!/bin/bash
pentru i în $(seq 1 100)
do
echo $RANDOM > ${i}.txt
Terminat
pisica *.txt | fel
drapel us
Am testat ultimul script, dar fișierele nu sunt denumite de la 1.txt la 100.txt. Am făcut o greșeală?
karel avatar
drapel sa
Mulțumesc pentru clarificarea întrebării. Am editat ultimul script, astfel încât fișierele de ieșire să fie numite de la 1.txt la 100.txt așa cum ați cerut.
drapel us
Mulțumesc că m-ai ajutat!
karel avatar
drapel sa
Întrebarea ta este mult mai clară acum.
Puncte:0
drapel ar

Puteți genera mai întâi toate numerele aleatoare și apoi le sortați înainte de a le scrie în fișiere:

pentru i în {1..100}; do
    echo $RANDOM
Terminat \
| sortare -n \
| în timp ce citește n; do
     (( x+=1 ))
     echo „$n” > „$x.txt”
  Terminat

Sau la fel ca o singură linie:

pentru i în {1..100}; do echo $RANDOM; terminat | sortare -n | în timp ce citește n; face ((x+=1)); echo „$n” > „$x.txt”; Terminat

Rețineți, de asemenea, că a avea fel sortați șiruri de numere numeric, aveți nevoie de el --sortare numerică (sau -n) opțiune.

Puncte:0
drapel sa

Faceți un director nou și denumiți directorul indiferent de numele pe care îl alegeți. Schimbați directoarele cu CD în noul director pe care l-ați creat, astfel încât toate fișierele care sunt create de scriptul shell vor fi create în noul director și numai aceste fișiere nou create vor fi redenumite. Apoi rulați următorul script shell.

#!/bin/bash
pentru i în $(seq 1 100)
do
echo $RANDOM > ${i}.txt # Pune un număr aleatoriu în fiecare fișier.
mv ${i}.txt $(head -1 ${i}.txt).txt # Redenumiți fișierele.
Terminat
ls *.txt | sort -n # Sortați fișierele în ordine crescătoare.

Întrebarea dvs. este ambiguă, deoarece aș putea redenumi și fișierele în ordine crescătoare cu nume noi care variază de la 1.txt la 100.txt. Dacă așa doriți ca fișierele să fie redenumite, utilizați în schimb acest script shell.

#!/bin/bash
pentru i în $(seq 1 100)
do
echo $RANDOM > ${i}.txt # pune un număr aleatoriu în fiecare fișier
mv ${i}.txt $(head -1 ${i}.txt).txt # redenumiți fișierele
Terminat
# ls *.txt | sort -n # Am comentat această linie și am adăugat o linie nouă după ea.
i=1; pentru numele fișierului în `ls *.txt | sort -n`; do mv "$filename" "$((i++)).txt"; Terminat
Doug Smythies avatar
drapel gn
Întrebarea pare o întrebare de tip teme și, ca atare, cred că nu ar trebui să dăm un răspuns.
karel avatar
drapel sa
@DougSmythies Vă simpatizez, dar consensul comunității Ask Ubuntu din ultimii 10 ani este că scripturile shell bash sunt la subiect la Ask Ubuntu și sarcinile de programare în alte limbaje de programare, inclusiv temele în alte limbaje de programare, sunt în afara subiectului. Singura dvs. soluție este să trimiteți o cerere de discuție a acestei probleme către Ask Ubuntu Meta. Aș fi bucuros să accept orice este consensul comunității Ask Ubuntu în această chestiune.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.