更改最后一列的位置,但换行

时间:2018-11-26 14:29:36

标签: awk

我有一个用\ 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

2 个答案:

答案 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