假设我们有一个文件,其中每一行都有不同的字数。 像这样:
Ref
我想以相反的顺序打印它。喜欢这个
Douglas Texn 98 64 44
54 88 27 37
Violet Denesik Texn 40 89 70
Blanche Hoeger
Johnathon Schultz Texn 51 41 24 96
我的想法是首先颠倒行的顺序,然后是列,但我不能实现第二部分。
实施第一部分的代码
96 24 41 51 Texn Schultz Johnathon
...
44 64 98 Texn Douglas
有什么想法?
答案 0 :(得分:1)
一种扭转单词序列的方法:
awk '{x=split($0,a); for(i=x;i!=0;i--){y=y?y OFS a[i]:a[i];}print y;y=""}' file
答案 1 :(得分:1)
您可以tac
awk
man tac,“反向连接和写入文件”
tac file | awk '{for(i=1; i<=NF/2; ++i){ temp=$i; $i=$(NF-i+1); $(NF-i+1)=temp }}1'
你明白了,
96 24 41 51 Texn Schultz Johnathon
Hoeger Blanche
70 89 40 Texn Denesik Violet
37 27 88 54
44 64 98 Texn Douglas
<强>解释强>
temp=$i; $i=$(NF-i+1); $(NF-i+1)=temp
是交换算法,
temp := x
x := y
y := temp
编辑:仅awk
解决方案
awk '{
for(i=1; i<=NF/2; ++i){ temp=$i; $i=$(NF-i+1); $(NF-i+1)=temp }
a[c++]=$0
}END{--c; for(;c>=0;c--){print a[c]}}' file
你明白了,
96 24 41 51 Texn Schultz Johnathon
Hoeger Blanche
70 89 40 Texn Denesik Violet
37 27 88 54
44 64 98 Texn Douglas
答案 2 :(得分:1)
Dinos_123455,请你试试看,如果有帮助请告诉我。如果您的o.s支持tac命令,那么以下内容可以帮助您。
tac file1 | awk '{for(i=NF;i>0;i--){printf("%s ",$i)};print X}'
我希望这会有所帮助。
编辑:根据您的要求,只有awk解决方案也可以帮助您。
awk 'FNR==NR{A[++i]=$0;next} {for(k=i;k>0;k--){num=split(A[k], array," ");for(q=num;q>0;q--){printf("%s ",array[q])};if(A[k]){print X};delete A[k]}}' file1 file1
答案 3 :(得分:1)
使用GNU awk实现真正的多维数组:
$ awk '{a[NR][1]; split($0,a[NR])} END{PROCINFO["sorted_in"]="@ind_num_desc"; for (r in a) for (c in a[r]) printf "%s%s", a[r][c], (c>1?OFS:ORS)}' file
96 24 41 51 Texn Schultz Johnathon
Hoeger Blanche
70 89 40 Texn Denesik Violet
37 27 88 54
44 64 98 Texn Douglas
其他问题:
awk '{a[NR]=$0} END{for (r=NR;r>0;r--) { nc=split(a[r],b); for (c=nc;c>0;c--) printf "%s%s", b[c], (c>1?OFS:ORS) } }' file
96 24 41 51 Texn Schultz Johnathon
Hoeger Blanche
70 89 40 Texn Denesik Violet
37 27 88 54
44 64 98 Texn Douglas
答案 4 :(得分:0)
所有awk版本:
$ awk '{ for(i=NF;i>=1;i--) # iterate fields backwards
a[NR]=a[NR] sprintf ($i OFS) } # append to array indexed on NR
END { for(i=NR;i>=1;i--) # reverse NR order
print a[i] }' file # output
96 24 41 51 Texn Schultz Johnathon
Hoeger Blanche
70 89 40 Texn Denesik Violet
37 27 88 54
44 64 98 Texn Douglas