我有一个用\ t分隔的文件。
header text with many lines
V F A B
10 30 26 42
14 33 25 45
16 32 23 43
18 37 22 48
我想将第三列改为第四列,反之亦然。我正在使用
awk '
BEGIN {
RS = "\n";
OFS="\t";
record=0;
};
record {
a = $4;
$4 = $3;
$3 = a;
};
$1=="V" {
record=1
};
{
print $0
};
'
}
第3列不仅具有更改列位置的功能,而且还具有原始第4列的换行符:
header text with many lines
V F A B
10 30 42
26
14 33 45
25
16 32 43
23
18 37 48
22
如何防止这种情况发生?
header text with many lines
V F A B
10 30 42 26
14 33 45 25
16 32 43 23
18 37 48 22
答案 0 :(得分:0)
请您尝试以下操作,使用通常的方法将1个字段的值存储到变量中,然后将第4个字段的值交换为第3个字段,最后将第4个字段的值作为变量值(可以说使用变量交换值)
awk 'FNR==1{print;next} {val=$3;$3=$4;$4=val} 1' OFS="\t" Input_file
答案 1 :(得分:0)
或者,这个混乱的sed:
sed -E 's/([[:digit:]]+)([[:blank:]]+)([[:digit:]]+)([[:space:]]*)$/\3\2\1\4/' file
# ^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
# 3rd column tab 4th column optional whitespce