Удаление столбцов через регулярные промежутки времени

#linux #awk

#linux #awk

Вопрос:

У меня есть файл, содержащий около 25000 столбцов и 3000 строк. Теперь, начиная с столбца 4, я хочу удалить столбцы 3-5 с интервалом от 8-го столбца до конца.

Пример:

Входной файл

 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20
d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 d16 d17 d18 d19 d20
 

Теперь мне нужен выходной файл

 c1 c2 c3 c4 c5 c9 c10 c11 c12 c13 c17 c18 c19 c20
d1 d2 d3 d4 d5 d9 d10 d11 d12 d13 d17 d18 d19 d20
 

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

Комментарии:

1. Извините, что запутался. Почему удален c15-c17 вместо c14-c16? Пожалуйста, уточните свою логику в отношении вашего вывода.

2. @jaypal: вы правы. Я приношу извинения за допущенную ошибку. Я исправил это.

Ответ №1:

Самый простой способ, вероятно, что-то вроде:

 awk '{
printf "%s %s %s", $1, $2, $3
for (i=4; i<=NF; i  )
    if ( ((i-3)%8) !~ /^[345]$/)
        printf " %s", $i
print ""
}' file
c1 c2 c3 c4 c5 c9 c10 c11 c12 c13 c17 c18 c19 c20
d1 d2 d3 d4 d5 d9 d10 d11 d12 d13 d17 d18 d19 d20
 

Возможно, потребуется изменить математику, но, надеюсь, вы поняли идею.

Комментарии:

1. Умный, я сдался после нескольких потраченных впустую попыток.