我怎样才能扭转文件中的行的顺序?
我想倒转文本文件(或标准input)中的行的顺序,保留每行的内容。
所以,即从以下开始:
foo bar baz
我想结束
baz bar foo
有没有一个标准的UNIX命令行工具?
BSD尾巴:
tail -r myfile.txt
参考: FreeBSD , NetBSD , OpenBSD和OS X手册页。
另外值得一提的是,TAC( cat
,阿姆, cat
反向)。 部分coreutils 。
翻转一个文件到另一个
tac a.txt > b.txt
有一个众所周知的sed技巧 :
# 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单行程序 :
awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*
如果你不记得,
perl -e 'print reverse <>'
在一个使用GNU工具的系统上,其他答案更简单,但不是所有的世界都是GNU / Linux …
如果你碰巧在vim
使用
:g/^/m0
$ (tac 2> /dev/null || tail -r)
尝试tac
,它适用于Linux,如果这不起作用使用tail -r
,它适用于BSD和OSX。
尝试以下命令:
grep -n "" myfile.txt | sort -r -n | gawk -F : "{ print $2 }"
只是打击:)(4.0+)
function print_reversed { readarray -t LINES for (( I = ${#LINES[@]}; I; )); do printf '%s\n' "${LINES[--I]}" done } print_reversed < file
最简单的方法是使用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
我真的很喜欢“ tail -r ”的回答,但是我最喜欢的gawk答案是…
gawk '{ L[n++] = $0 } END { while(n--) print L[n] }' file
tac <file_name>
例:
$ cat file1.txt 1 2 3 4 5 $ tac file1.txt 5 4 3 2 1
编辑下面的从1到10生成随机sorting的数字列表:
seq 1 10 | sort -R | tee /tmp/lst |cat <(cat /tmp/lst) <(echo '-------') **...**
在那里用实际的命令代替点,这个命令颠倒了列表
TAC
seq 1 10 | sort -R | tee /tmp/lst |cat <(cat /tmp/lst) <(echo '-------') \ <(tac)
python:在sys.stdin上使用[:: – 1]
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]))")
最佳解决scheme
tail -n20 file.txt | tac
对于可能在shell脚本中使用tac
交叉操作系统(即OSX,Linux)解决scheme,可以像上面提到的那样使用自制软件,那么只需要像以下这样的tac:
brew install coreutils echo "alias tac='gtac'" >> ~/.bash_aliases (or wherever you load aliases) source ~/.bash_aliases tac myfile.txt
我有同样的问题,但我也希望第一行(标题)留在上面。 所以我需要用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
sort -r < filename
要么
rev < filename