изменить место последнего столбца, но получить новую строку - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть файл, разделенный \ 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

Я хочу изменить 3-й столбец на 4-й и наоборот.Я использую

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 голосов
/ 26 ноября 2018

Или этот грязный сед:

sed -E 's/([[:digit:]]+)([[:blank:]]+)([[:digit:]]+)([[:space:]]*)$/\3\2\1\4/' file
#         ^^^^^^^^^^^^^^              ^^^^^^^^^^^^^^
#         3rd column        tab       4th column    optional whitespce
0 голосов
/ 26 ноября 2018

Не могли бы вы попробовать следующее, используя обычный метод сохранения значения 1 поля в переменной, а затем поменяв значение 4-го поля на 3-е поле, наконец, поместив значение 4-го поля в качестве значения переменной (можно сказать, поменять местами значения с помощью переменной).

awk 'FNR==1{print;next} {val=$3;$3=$4;$4=val} 1' OFS="\t"  Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...