我想将该行的最后一列加入下一行第一列。例如:
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
命令来执行此操作。
答案 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}'