ฉันจะกลับลำดับของบรรทัดในไฟล์ได้อย่างไร


641

ฉันต้องการย้อนกลับลำดับของบรรทัดในไฟล์ข้อความ (หรือ stdin) รักษาเนื้อหาของแต่ละบรรทัด

ดังนั้นคือเริ่มต้นด้วย:

foo
bar
baz

ฉันต้องการที่จะจบลงด้วย

baz
bar
foo

มียูทิลิตี commandline UNIX มาตรฐานสำหรับสิ่งนี้หรือไม่?


2
หมายเหตุสำคัญเกี่ยวกับการย้อนกลับบรรทัด: ตรวจสอบให้แน่ใจว่าไฟล์ของคุณมีบรรทัดใหม่ต่อท้ายก่อน มิฉะนั้นสองบรรทัดสุดท้ายของไฟล์อินพุตจะถูกรวมเป็นหนึ่งบรรทัดในไฟล์เอาต์พุต (อย่างน้อยก็ใช้perl -e 'print reverse <>'แต่อาจใช้กับวิธีอื่นด้วย)
jakub.g


นอกจากนี้ยังสวยเกือบซ้ำ ( แต่เก่า) ของunix.stackexchange.com/questions/9356/... เช่นในกรณีนั้นการโยกย้ายไปยัง unix.stackexchange.com อาจเหมาะสม
mc0e

คำตอบ:


444

หาง BSD:

tail -r myfile.txt

การอ้างอิง: หน้าคู่มือFreeBSD , NetBSD , OpenBSDและOS X


120
เพียงจำไว้ว่าตัวเลือก '-r' ไม่สอดคล้องกับ POSIX วิธีการแก้ปัญหาที่ล่าช้าและเบาลงด้านล่างจะทำงานได้แม้ในระบบที่ได้รับรางวัลที่สุด
ปืน

31
เพิ่งลองสิ่งนี้บน Ubuntu 12.04 และค้นพบว่าไม่มีตัวเลือก -r สำหรับเวอร์ชั่นหางของฉัน (8.13) ใช้ 'tac' แทน (ดูคำตอบของ Mihai ด้านล่าง)
Odigity

12
เครื่องหมายถูกควรเลื่อนไปด้านล่างเพื่อ tac tail -r ล้มเหลวบน Ubuntu 12/13, Fedora 20, Suse 11
rickfoosusa

2
tail -r ~ / 1 ~ tail: ตัวเลือกที่ไม่ถูกต้อง - r ลอง `หาง - ช่วย 'สำหรับข้อมูลเพิ่มเติม ดูเหมือนตัวเลือกใหม่
Bohdan

5
คำตอบควรพูดถึงว่านี่เป็น BSD เท่านั้นโดยเฉพาะอย่างยิ่งเมื่อ OP ขอยูทิลิตี้ "UNIX มาตรฐาน" นี่ไม่ได้อยู่ใน GNU tail ดังนั้นมันจึงไม่ใช่มาตรฐานทั่วไป
DanC

1399

ควรพูดถึง: tac(the, ahem, reverse of cat) เป็นส่วนหนึ่งของcoreutils

พลิกไฟล์หนึ่งไปเป็นอีกไฟล์หนึ่ง

tac a.txt > b.txt

72
โดยเฉพาะอย่างยิ่งมูลค่าการกล่าวถึงผู้ใช้รุ่นหางโดยไม่มีตัวเลือก -r! (คนลินุกซ์ส่วนใหญ่มีหาง GNU ซึ่งไม่มี -r ดังนั้นเราจึงมี GNU แทค)
oylenshpeegul

11
แค่ทราบเพราะคนพูดถึง tac มาก่อน แต่ tac ไม่ปรากฏว่าติดตั้งบน OS X ไม่ใช่ว่ามันยากที่จะเขียนแทนใน Perl แต่ฉันไม่มีของจริง
Chris Lutz

5
คุณสามารถรับ GNU tac สำหรับ OS X จาก Fink คุณอาจต้องการรับกนู GNU เช่นกันเนื่องจากบางสิ่งที่หาง BSD ไม่ทำ
oylenshpeegul

25
หากคุณใช้ OS X กับ homebrew คุณสามารถติดตั้ง tac โดยใช้brew install coreutils(ติดตั้งgtacตามค่าเริ่มต้น)
Robert

3
หนึ่งในปัญหาคือถ้าไฟล์ไม่มีบรรทัดใหม่ต่อท้าย 2 บรรทัดแรกอาจถูกรวมเป็น 1 บรรทัด echo -n "abc\ndee" > test; tac test.
CMCDragonkai

161

มีเทคนิคหลอกลวงที่รู้จักกันดี :

# reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d'               # method 1
sed -n '1!G;h;$p'             # method 2

(คำอธิบาย: เติมบรรทัดที่ไม่ใช่ค่าเริ่มต้นเพื่อพักบัฟเฟอร์สลับบรรทัดและพักบัฟเฟอร์พิมพ์บรรทัดท้าย)

อีกทางหนึ่ง (ด้วยการดำเนินการที่เร็วขึ้น) จาก awk one-liners :

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

หากคุณจำไม่ได้

perl -e 'print reverse <>'

บนระบบที่มียูทิลิตี้ GNU คำตอบอื่นนั้นง่ายกว่า แต่ไม่ใช่ทุกคนในโลกที่เป็น GNU / Linux ...


4
จากแหล่งเดียวกัน: awk '{a [i ++] = $ 0} END {สำหรับ (j = i-1; j> = 0;) พิมพ์ไฟล์ [j--]}' * ทั้งรุ่น sed และ awk ทำงาน เราเตอร์ busybox ของฉัน 'tac' และ 'tail -r' ทำไม่ได้
ปืน

8
ฉันหวังว่าอันนี้เป็นคำตอบที่ได้รับการยอมรับ เพราะมีให้เลือกเสมอ แต่ไม่ใช่tail -rและจะเป็นแบบแทค
ryenus

@ryenus: tacคาดว่าจะจัดการกับไฟล์ขนาดใหญ่โดยพลการที่ไม่พอดีกับหน่วยความจำ (ความยาวบรรทัดยัง จำกัด อยู่) มันไม่ชัดเจนว่าsedการแก้ปัญหาทำงานได้กับไฟล์ดังกล่าว
jfs

แต่ปัญหาเท่านั้น: เตรียมที่จะรอ :-)
แอนทอนLizée

1
แม่นยำยิ่งขึ้น: รหัส sed อยู่ใน O (n ^ 2) และอาจช้ามากสำหรับไฟล์ขนาดใหญ่ ดังนั้น upvote ของฉันสำหรับทางเลือก awk, เชิงเส้น ฉันไม่ได้ลองตัวเลือก perl, เป็นมิตรกับการวางท่อน้อยกว่า
Antoine Lizée

70

ในตอนท้ายของคำสั่งของคุณใส่: | tac

แทคทำสิ่งที่คุณต้องการอย่างแน่นอน "เขียนไฟล์แต่ละไฟล์ไปยังเอาต์พุตมาตรฐานบรรทัดสุดท้ายก่อน"

tac อยู่ตรงข้ามกับ cat :-)


ทำไมต้องเขา โปรดอธิบายคุณค่าของtacคำสั่งซึ่งมีประโยชน์สำหรับผู้ใช้ใหม่ที่อาจค้นหาเรื่องเดียวกัน
Nic3500

11
นี่ควรเป็นคำตอบที่ยอมรับได้จริง ๆ ความอัปยศดังกล่าวมีคะแนนโหวตจำนวนมาก
joelittlejohn

62

หากคุณบังเอิญเกิดการvimใช้งาน

:g/^/m0

5
ที่เกี่ยวข้อง: วิธีการกลับคำสั่งของเส้น? ที่ Vim SE
kenorb

4
ฉันจะลงคะแนนถ้าคุณอธิบายสั้น ๆ ว่ามันทำอะไร
mc0e

2
ใช่ฉันได้รับบิตนั้น แต่ฉันหมายถึงการทำลายสิ่งที่บิตต่างๆของคำสั่ง vim กำลังทำอยู่ ตอนนี้ฉันได้ดูคำตอบ @kenorb ที่เชื่อมโยงซึ่งให้คำอธิบายแล้ว
mc0e

5
g หมายถึง "ทำสิ่งนี้ทั่วโลก ^ หมายถึง" จุดเริ่มต้นของบรรทัด "m หมายถึง" ย้ายบรรทัดไปยังหมายเลขบรรทัดใหม่ 0 คือบรรทัดที่จะย้ายไป 0 หมายถึง "ส่วนบนของไฟล์ก่อนบรรทัดปัจจุบัน 1" ดังนั้น: "ค้นหาทุกบรรทัดที่มีจุดเริ่มต้นและย้ายไปยังหมายเลขบรรทัด 0" คุณค้นหาบรรทัดที่ 1 และย้ายไปด้านบน ไม่ทำอะไรเลย จากนั้นค้นหาบรรทัดที่ 2 และย้ายไปที่บรรทัดที่ 1 ไปที่ด้านบนของไฟล์ ขณะนี้พบสาย 3 และย้ายมันไปด้านบน ทำซ้ำขั้นตอนนี้ทุกบรรทัด ในตอนท้ายคุณเสร็จโดยการย้ายบรรทัดสุดท้ายไปด้านบน เมื่อเสร็จแล้วคุณกลับรายการทุกบรรทัด
Ronopolis

ควรสังเกตว่าคำสั่ง: g global ทำงานในลักษณะที่เฉพาะเจาะจงมากเทียบกับการใช้ช่วง ตัวอย่างเช่นคำสั่ง ":% m0" จะไม่ย้อนกลับลำดับของบรรทัดขณะที่ ":% ปกติ ddggP" จะ (ตามที่จะเป็น ": g / ^ / ปกติ ddggP") กลอุบายและคำอธิบายที่ดี ... โอ้ใช่แล้วลืมโทเค็น "ดู: ช่วย: g สำหรับข้อมูลเพิ่มเติม" ...
Nathan Chappell


42
$ (tac 2> /dev/null || tail -r)

ลองใช้tacงานได้กับ Linux และหากใช้ไม่ได้ผลtail -rจะทำงานกับ BSD และ OSX


4
ทำไมไม่tac myfile.txt- ฉันหายไปอะไร
ปราชญ์

8
@sage การย้อนกลับไปtail -rในกรณีที่tacไม่พร้อมใช้งาน tacไม่เป็นไปตาม POSIX tail -rไม่เป็น ยังคงไม่สามารถป้องกันความผิดพลาดได้ แต่จะช่วยเพิ่มโอกาสในการทำงาน
slowpoison

ฉันเห็น - สำหรับกรณีที่คุณไม่สามารถเปลี่ยนคำสั่งด้วยตนเอง / โต้ตอบเมื่อมันล้มเหลว ดีพอสำหรับฉัน
ปราชญ์

3
คุณต้องมีการทดสอบที่เหมาะสมเพื่อดูว่ามีแทค จะเกิดอะไรขึ้นถ้าtacมี แต่จะหมด RAM และสลับไปมาครึ่งทางผ่านการสตรีมอินพุตขนาดใหญ่ มันล้มเหลวและจากนั้นก็tail -rประสบความสำเร็จในการประมวลผลส่วนที่เหลือของกระแสให้ผลลัพธ์ที่ไม่ถูกต้อง
mc0e

@PetrPeller ดูคำตอบข้างต้นความคิดเห็นโดย Robert สำหรับ OSX ใช้ homebrew brew install coreutils และการใช้งานgtacในสถานที่tacและถ้าคุณชอบแทคเพิ่มเป็นนามแฝงไปgtacถ้าเช่นคุณอยากเชลล์สคริปต์ที่ใช้มันข้ามแพลตฟอร์ม (Linux, OSX)
lacostenycoder

24

ลองคำสั่งต่อไปนี้:

grep -n "" myfile.txt | sort -r -n | gawk -F : "{ print $2 }"

แทนที่จะเป็นคำสั่ง gawk ฉันจะทำสิ่งนี้: sed 's/^[0-9]*://g'
bng44270

2
ทำไมไม่ใช้ "nl" แทน grep -n
บุคคลที่ดี

3
@GoodPerson nlโดยค่าเริ่มต้นจะไม่สามารถนับจำนวนบรรทัดว่างได้ -baตัวเลือกที่มีอยู่ในบางระบบไม่ได้ไม่เป็นสากล (HP / UX มาถึงใจ แต่ฉันหวังว่ามันจะไม่ได้) ในขณะที่grep -nจะจำนวนเสมอทุกสายที่ตรงกับ (ในกรณีนี้ว่าง) regex
ghoti

1
แทนที่จะพูดพล่ามฉันใช้cut -d: -f2-
Alexander Stumpf

17

Just Bash :) (4.0+)

function print_reversed {
    local lines i
    readarray -t lines

    for (( i = ${#lines[@]}; i--; )); do
        printf '%s\n' "${lines[i]}"
    done
}

print_reversed < file

2
+1 สำหรับคำตอบในการทุบตีและ O (n) และไม่ได้ใช้การเรียกซ้ำ (+3 ถ้าผม)
nhed

2
ลองนี้กับไฟล์ที่มีเส้น-neneneneneneneและเป็นสักขีพยานเหตุผลที่คนขอแนะนำให้ใช้แทนprintf '%s\n' echo
mtraceur

@traceur ฉันจะเห็นด้วยกับเวลานี้ตั้งแต่คนนี้เป็นฟังก์ชั่นทั่วไป
konsolebox

11

วิธีที่ง่ายที่สุดคือการใช้tacคำสั่ง tacเป็นcatสิ่งที่ตรงกันข้าม ตัวอย่าง:

$ cat order.txt
roger shah 
armin van buuren
fpga vhdl arduino c++ java gridgain
$ tac order.txt > inverted_file.txt
$ cat inverted_file.txt
fpga vhdl arduino c++ java gridgain
armin van buuren
roger shah 

1
ไม่แน่ใจว่าทำไมคำตอบนี้ปรากฏก่อนหน้าคำตอบด้านล่าง แต่เป็นคำตอบของ stackoverflow.com/a/742485/1174784 - ซึ่งโพสต์เมื่อหลายปีก่อน
Anarcat

10

ฉันชอบคำตอบ" tail -r " จริงๆแต่คำตอบที่ชอบที่สุดของฉันคือ ....

gawk '{ L[n++] = $0 } 
  END { while(n--) 
        print L[n] }' file

ทดสอบกับmawkUbuntu 14.04 LTS - ใช้งานได้จึงไม่เฉพาะ GNU awk +1
Sergiy Kolodyazhnyy

n++สามารถแทนที่ด้วยNR
karakfa

3

แก้ไข ข้อมูลต่อไปนี้สร้างรายการเรียงลำดับหมายเลขสุ่มจาก 1 ถึง 10:

seq 1 10 | sort -R | tee /tmp/lst |cat <(cat /tmp/lst) <(echo '-------') **...**

จุดที่จะถูกแทนที่ด้วยคำสั่งจริงซึ่งกลับรายการ

แทค

seq 1 10 | sort -R | tee /tmp/lst |cat <(cat /tmp/lst) <(echo '-------') \
<(tac)

python: การใช้ [:: - 1] บน sys.stdin

seq 1 10 | sort -R | tee /tmp/lst |cat <(cat /tmp/lst) <(echo '-------') \
<(python -c "import sys; print(''.join(([line for line in sys.stdin])[::-1]))")

3

สำหรับโซลูชันข้าม OS (เช่น OSX, Linux) ที่อาจใช้tacในเชลล์สคริปต์ใช้ homebrew ตามที่คนอื่น ๆ ได้กล่าวถึงข้างต้นแล้วเพียงแค่นามแฝงเช่นนั้น:

ติดตั้ง lib

สำหรับ MacOS

brew install coreutils

สำหรับ linux debian

sudo apt-get update
sudo apt-get install coreutils 

จากนั้นเพิ่มนามแฝง

echo "alias tac='gtac'" >> ~/.bash_aliases (or wherever you load aliases)
source ~/.bash_aliases
tac myfile.txt


1

หากคุณต้องการแก้ไขไฟล์ในสถานที่คุณสามารถเรียกใช้

sed -i '1!G;h;$!d' filename

สิ่งนี้จะลบความจำเป็นในการสร้างไฟล์ชั่วคราวจากนั้นลบหรือเปลี่ยนชื่อต้นฉบับและมีผลลัพธ์เหมือนกัน ตัวอย่างเช่น:

$tac file > file2
$sed -i '1!G;h;$!d' file
$diff file file2
$

ตามคำตอบของ ephemientซึ่งทำเกือบ แต่ไม่มากสิ่งที่ฉันต้องการ


1

มันเกิดขึ้นกับผมว่าผมต้องการที่จะได้รับที่ผ่านมาnสายของแฟ้มข้อความที่มีขนาดใหญ่มากได้อย่างมีประสิทธิภาพ

สิ่งแรกที่ฉันพยายามคือtail -n 10000000 file.txt > ans.txtแต่ฉันพบว่าช้ามากเพราะtailต้องหาที่ตั้งแล้วก็ย้ายกลับไปพิมพ์ผลลัพธ์

เมื่อฉันรู้ฉันจะเปลี่ยนไปใช้วิธีแก้ไขปัญหาอื่น: tac file.txt | head -n 10000000 > ans.txt. เวลานี้ตำแหน่งค้นหาเพียงต้องการย้ายจากจุดสิ้นสุดไปยังตำแหน่งที่ต้องการและประหยัดเวลา 50% !

นำข้อความกลับบ้าน:

ใช้tac file.txt | head -n nหากคุณtailไม่มี-rตัวเลือก


0

ทางออกที่ดีที่สุด:

tail -n20 file.txt | tac

ยินดีต้อนรับสู่ Stack Overflow! ในขณะที่ข้อมูลโค้ดนี้อาจแก้ไขคำถามรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพของโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ โปรดอย่าพยายามทำให้รหัสของคุณแน่นเกินไปด้วยคำอธิบายที่อธิบายซึ่งจะช่วยลดความสามารถในการอ่านของทั้งรหัสและคำอธิบาย!
kayess

0

สำหรับผู้ใช้ Emacs: C-x h(เลือกไฟล์ทั้งหมด) M-x reverse-regionแล้ว ยังใช้งานได้เฉพาะการเลือกชิ้นส่วนหรือเส้นและคืนค่าเหล่านั้น


0

ฉันเห็นแนวคิดที่น่าสนใจมากมาย แต่ลองคิดดูสิ วางข้อความของคุณลงในส่วนนี้:

rev | tr '\ n' '~' | rev | tr '~' '\ n'

ซึ่งถือว่าอักขระ '~' ไม่ได้อยู่ในไฟล์ สิ่งนี้น่าจะใช้ได้กับยูนิกซ์ทุกเชลล์ที่จะย้อนกลับไปในปี 1961 หรืออะไรทำนองนั้น


-1

ฉันมีคำถามเดียวกัน แต่ฉันต้องการให้บรรทัดแรก (ส่วนหัว) อยู่ด้านบน ดังนั้นฉันต้องใช้พลังแห่ง awk

cat dax-weekly.csv | awk '1 { last = NR; line[last] = $0; } END { print line[1]; for (i = last; i > 1; i--) { print line[i]; } }'

PS ยังทำงานใน cygwin หรือ gitbash


ที่ปรากฏขึ้นจะส่งผลให้มากกว่า1\n20\n19...2\n 20\n19...\2\n1\n
Mark Booth

-1

คุณสามารถทำมันได้ด้วยและvim stdin stdoutนอกจากนี้คุณยังสามารถใช้exให้เป็นตาม POSIX เป็นเพียงโหมดภาพสำหรับvim exที่จริงแล้วคุณสามารถใช้exกับvim -eหรือvim -E( exโหมดที่ได้รับการปรับปรุง) vimมีประโยชน์เพราะไม่เหมือนเครื่องมือที่ชอบsedบัฟเฟอร์ไฟล์สำหรับการแก้ไขในขณะที่sedใช้สำหรับสตรีม คุณอาจจะสามารถใช้งานawkได้ แต่คุณจะต้องบัฟเฟอร์ทุกอย่างด้วยตนเองในตัวแปร

ความคิดคือการทำดังต่อไปนี้:

  1. อ่านจาก stdin
  2. สำหรับแต่ละบรรทัดเลื่อนไปยังบรรทัด 1 (เพื่อย้อนกลับ) g/^/m0คำสั่ง ซึ่งหมายความว่าทั่วโลกสำหรับแต่ละบรรทัดg; ตรงกับจุดเริ่มต้นของสายซึ่งตรงกับอะไร^; ย้ายที่อยู่หลัง 0 ซึ่งเป็นสาย m01
  3. พิมพ์ทุกอย่าง %pคำสั่ง ซึ่งหมายความว่าสำหรับช่วงของทุกสาย%; pพิมพ์บรรทัด
  4. ออกจากแรงโดยไม่บันทึกไฟล์ q!คำสั่ง หมายความว่าเลิกqแล้ว !แข็งขัน
# Generate a newline delimited sequence of 1 to 10
$ seq 10
1
2
3
4
5
6
7
8
9
10

# Use - to read from stdin.
# vim has a delay and annoying 'Vim: Reading from stdin...' output
# if you use - to read from stdin. Use --not-a-term to hide output.
# --not-a-term requires vim 8.0.1308 (Nov 2017)
# Use -E for improved ex mode. -e would work here too since I'm not
# using any improved ex mode features.
# each of the commands I explained above are specified with a + sign
# and are run sequentially.
$ seq 10 | vim - --not-a-term -Es +'g/^/m0' +'%p' +'q!'
10
9
8
7
6
5
4
3
2
1
# non improved ex mode works here too, -e.
$ seq 10 | vim - --not-a-term -es +'g/^/m0' +'%p' +'q!'

# If you don't have --not-a-term, use /dev/stdin
seq 10 | vim -E +'g/^/m0' +'%p' +'q!' /dev/stdin

# POSIX compliant (maybe)
# POSIX compliant ex doesn't allow using + sign to specify commands.
# It also might not allow running multiple commands sequentially.
# The docs say "Implementations may support more than a single -c"
# If yours does support multiple -c
$ seq 10 | ex -c "execute -c 'g/^/m0' -c '%p' -c 'q!' /dev/stdin

# If not, you can chain them with the bar, |. This is same as shell
# piping. It's more like shell semi-colon, ;.
# The g command consumes the |, so you can use execute to prevent that.
# Not sure if execute and | is POSIX compliant.
seq 10 | ex -c "execute 'g/^/m0' | %p | q!" /dev/stdin

วิธีที่จะทำให้นี้นำมาใช้ใหม่

ผมใช้โทรสคริปต์ฉันved(แก้ไขเป็นกลุ่มเช่นsed) stdinเพื่อใช้เป็นกลุ่มที่จะแก้ไข เพิ่มไปยังไฟล์ที่เรียกว่าvedในเส้นทางของคุณ:

#!/usr/bin/env sh

vim - --not-a-term -Es "$@" +'%p | q!'

ฉันใช้+คำสั่งเดียวแทน+'%p' +'q!'เพราะ vim จำกัด คุณไว้ที่ 10 คำสั่ง ดังนั้นการรวมพวกเขาอนุญาตให้"$@"มี 9 +คำสั่งแทน 8

จากนั้นคุณสามารถทำได้:

seq 10 | ved +'g/^/m0'

หากคุณไม่มีเสียงเรียก 8 ให้ใส่มันvedแทน:

#!/usr/bin/env sh

vim -E "$@" +'%p | q!' /dev/stdin

-3
rev
text here

หรือ

rev <file>

หรือ

rev texthere

สวัสดียินดีต้อนรับสู่ Stack Overflow! เมื่อคุณตอบคำถามคุณควรมีคำอธิบายบางอย่างเช่นสิ่งที่ผู้เขียนทำผิดและสิ่งที่คุณทำเพื่อแก้ไข ฉันกำลังบอกคุณนี้เพราะคำตอบของคุณถูกตั้งค่าสถานะว่ามีคุณภาพต่ำและกำลังได้รับการตรวจสอบ คุณสามารถแก้ไขคำตอบได้โดยคลิกที่ปุ่ม "แก้ไข"
Federico Grandi

Esp คำตอบใหม่สำหรับคำถามเก่าและตอบที่ดีต้องการเหตุผลที่เพียงพอสำหรับการเพิ่มอีกคำตอบ
Gert Arnold

rev จะพลิกข้อความในแนวนอนเช่นกันซึ่งไม่ใช่พฤติกรรมที่ต้องการ
D3l_Gato


-9
sort -r < filename

หรือ

rev < filename

7
sort -rใช้งานได้เฉพาะถ้าอินพุตถูกเรียงลำดับแล้วซึ่งไม่ใช่กรณีที่นี่ revฝืนตัวละครต่อบรรทัด แต่รักษาคำสั่งซื้อสายเหมือนเดิมซึ่งก็ไม่ใช่สิ่งที่ Scotty ขอ ดังนั้นคำตอบนี้จริงๆแล้วไม่มีคำตอบเลย
Alexander Stumpf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.