awk - 使用下一行第一列加入最后一列

时间:2013-06-18 11:21:22

标签: awk

我想将该行的最后一列加入下一行第一列。例如:

cat FILE
12  15
22  25
32  35
42  45

像这样加入:

15  22
25  32
35  42

15(上一栏)与22加入(下一行的第一列)。

我的解决方案是:tr '\n' '@' < FILE | tr '\t' '\n' | grep '@' | grep -v '@$' | tr '@' '\t' 但是可能有简单的awk命令来执行此操作。

4 个答案:

答案 0 :(得分:3)

知道了!

$ awk 'BEGIN{OFS="\t"}{if (NR==1) {a=$2} else {print a,$1;a=$2}}' file
15      22
25      32
35      42
  • 'BEGIN{OFS="\t"}将文件分隔符设置为标签。
  • {if (NR==1) {a=$2}第一行只存储第二个字段。
  • 在其余情况下,
  • else {print a,$1;a=$2}}打印前一行的第二个字段和第一个当前字段。这样我们就不会打印最后一条记录了。

答案 1 :(得分:3)

awk '{ 
  for (i = 2; i < NF; i += 2) 
    print $i, $(i + 1) 
    }' RS= OFS=\\t infile 

使用 bash

a=($(<infile));printf '%s\t%s\n' ${a[@]:1:${#a[@]}-2}

使用 zsh

printf '%s\t%s\n' ${$(<infile):1:-1}

答案 2 :(得分:2)

Dimitre Radoulov有解决方案,但如果我们打高尔夫球:

awk '$1=$NF=X;1' RS= file|xargs -n2
15 22
25 32
35 42

答案 3 :(得分:0)

awk 'NR!=1{print $1,p} {p=$2}'