本文介绍了使用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
使用tr
,wc
和pr
$ 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重新排序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!