0

I want to join last column of the line with the next line first column. For example:

cat FILE
12  15
22  25
32  35
42  45

to join like this:

15  22
25  32
35  42

15 (last column) joined with 22 (first column of next line).

My solution is: tr '\n' '@' < FILE | tr '\t' '\n' | grep '@' | grep -v '@$' | tr '@' '\t' But there might be simple awk command to do this.

4

4 回答 4

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}
于 2013-06-18T11:39:33.720 回答
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}}在其余情况下,打印前一行的第二个字段和当前的第一个字段。这样我们就不会打印最后一条记录。
于 2013-06-18T11:27:10.827 回答
2

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

awk '$1=$NF=X;1' RS= file|xargs -n2
15 22
25 32
35 42
于 2013-06-18T11:57:15.350 回答
0
awk 'NR!=1{print $1,p} {p=$2}'
于 2017-02-01T20:00:19.077 回答