Как заменить слово в определенном столбце, если оно не соответствует выражению?

Если я не ошибаюсь, ваше выражение (здесь немного реорганизовано) находит номер недели, соответствующий первому дню текущего месяца, номер недели, соответствующий сегодняшнему дню, и вычисляет разницу как неделю месяца ?

first=$(date -d "-$(($(date +%d)-1)) days")
weekofmon=$(( 1 + $(date +%V) - $(date -d "$first" +%V) ))

Если это верно, и вам нужна неделя месяца для прошлой недели, разве не должно быть достаточно просто заменить «сегодня» на «7 дней назад» (во всех местах), чтобы получить месяц из -неделя, соответствующая этой дате?

now="7 days ago"
first=$(date -d "$now - $(($(date +%d -d "$now" )-1)) days")
weekofmon=$(( 1 + 10#$(date +%V -d "$now") - 10#$(date -d "$first" +%V) ))

Функция полагается на date , чтобы анализировать такие выражения, как «7 дней назад - 3 дня». date +% V печатает номера недель <10 с ведущим нулем, что заставляет их интерпретировать их как восьмеричные числа, нарушая 08 и 09 . Добавьте 10 # , чтобы заставить bash принимать числа в десятичном формате.

Более короткий способ получить первый день того же месяца:

first=$(date -d "$now" +"%Y-%m-01") 

(другой формат, но дата должна его интерпретировать.)

1
29.02.2016, 02:21
1 ответ
awk -v OFS='\t' '$4 !~ /^[pm]iRNA/ { $4 = "rfam" } ; { $4 = $4 ; print }' file

Это именно то, что вы просили - если поле 4 не соответствует регулярному выражению ^ [pm] iRNA , установите его на rfam . Затем выведите строку, изменялась она или нет.

Примечание. Я установил разделитель выходных полей (OFS) на вкладку, чтобы обеспечить согласованный вывод, и добавил $ 4 = $ 4 перед оператором печати (который имеет побочный эффект, вызывая появление поля разделитель в выходной строке должен быть изменен на OFS) - в противном случае строки, которые были изменены, будут иметь OFS по умолчанию (один пробел), в то время как неизмененные строки будут неизменными по сравнению с тем, что было в исходном файле, что может привести к тому, что столбцы будут не выстраиваются правильно при просмотре в терминале с cat или чем-то еще.

1
27.01.2020, 23:48

Теги

Похожие вопросы