本文介绍了使用awk重新排序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用awk,sed对列进行重新排序...但是我找不到正确的答案,基本上,我想从以下位置重新排列值:

I am trying to reorder the columns using awk, sed... but I could not find the correct answer for that,Basically, I want to reorder the Values from:

time 012016 022016 032016 04216

John 231 321 121 432

Mary 456 213 654 735

Charles 325 867 984 235

收件人:

time John Mary Charles

012016 231 456 325

022016 321 213 867

032016 121 654 984

042016 432 735 235

我尝试使用类似的方法,但缺少数字:

I tried to use something like but I am missing the numbers:

awk '{print $1}' ./database.dat | paste -d,  -s

输出:

time John Mary Charles

推荐答案

$ cat ip.txt
time 012016 022016 032016 04216
John 231 321 121 432
Mary 456 213 654 735
Charles 325 867 984 235

使用trwcpr

$ tr ' ' '\n' < ip.txt | pr -$(wc -l < ip.txt)t
time          John          Mary          Charles
012016        231           456           325
022016        321           213           867
032016        121           654           984
04216         432           735           235


使用perl,应该比tr, wc, pr mash


With perl, should be faster than tr, wc, pr mash

$ perl -lane '
push(@a, @F);
END
{
    $r = $.; $c = $#F + 1;
    foreach $i (0..$#F)
    {
        print join "\t", @a[map {$i + $_*$c} 0..$r];
    }
}' ip.txt
time    John    Mary    Charles
012016  231 456 325
022016  321 213 867
032016  121 654 984
04216   432 735 235

  • 输入行在空格处分割,并保存在@F数组中.该数组的每一行都连接到@a数组
  • 在处理了整个文件之后,$.在输入文件中将具有行数. $#F给出@F数组的最后一个元素的索引
  • 然后以所需格式打印
    • Input line is split on spaces, which gets saved in @F array. That array is concatenated for every line to @a array
    • After entire file is processed, $. will have number of lines in input file. $#F gives index of last element of @F array
    • Then print in required format
    • 这篇关于使用awk重新排序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-07 07:41