Объединение двух столбцов текстового файла


У меня есть файл tsv, такой как

1   2   3   4   5   ...
a   b   c   d   e   ...
x   y   z   j   k   ...

Как я могу объединить два смежных столбца, скажем 2-й и 3-й, чтобы получить

1   2-3   4   5   ...
a   b-c   d   e   ...
x   y-z   j   k   ...

Мне нужен код для работы с текстовыми файлами с разным количеством столбцов, поэтому я не могу использовать что-то вроде awk 'BEGIN{FS="t"} {print $1"t"$2"-"$3"t"$4"t"$5}' file

awk это первый инструмент, о котором я подумал для этой задачи, и который я пытаюсь изучить, поэтому мне очень интересно получить ответы, используя его, но любое решение с любым другим инструментом будет очень оценено.

3 2

3 ответа:

С простым sed команда для файла tsv :

sed 's/\t/-/2' file

Вывод:

1   2-3 4   5   ...
a   b-c d   e   ...
x   y-z j   k   ...

Следующие awk могут помочь вам в том же, если вы не беспокоитесь о небольшом пространстве, которое будет создано, когда 3-е поле будет обнулено.

awk '{$2=$2"-"$3;$3=""} 1'  Input_file

С awk:

awk -v OFS='\t' -v col=2 '{
    $(col)=$(col)"-"$(col+1);              # merge col and col+1
    for (i=col+1;i<NF;i++) $(i)=$(i+1);    # shift columns right of col+1 by one to the left
    NF--;                                  # remove the last field
}1' file                                   # print the record

Вывод:

1   2-3   4   5   ...
a   b-c   d   e   ...
x   y-z   j   k   ...