#linux #shell #awk
Вопрос:
У меня есть файл в виде:
$cat file.txt
1981080512 14 15
2019050612 17 18
2020040912 19 95
Здесь 1-й столбец представляет даты как ГГГГММДДХХ
Я хотел бы записать даты как YYMMDDHH. Итак, результат желания:
81080512 14 15
19050612 17 18
20040912 19 95
Мой сценарий:
while read -r x;do
yy=$(echo $x | awk '{print substr($0,3,2)}')
mm=$(echo $x | awk '{print substr($0,5,2)}')
dd=$(echo $x | awk '{print substr($0,7,2)}')
hh=$(echo $x | awk '{print substr($0,9,2)}')
awk '{printf "s%4s%4sn",'$yy$mm$dd$hh',$2,$3}'
done < file.txt
Он печатает
81080512 14 15
81080512 17 18
Любая помощь, пожалуйста. Спасибо.
Комментарии:
1. Ооочень вы хотите удалить первые два символа? Зачем весь синтаксический анализ? Просто
cut -c3-
?
Ответ №1:
Пожалуйста, не убивайте меня за этот простой ответ, но как насчет этого:
cut -c 3- file.txt
Вы просто сокращаете первые две цифры, показывая символ 3 до конца каждой строки ( -c
переключатель указывает, что вам нужно вырезать символы (не байты, …)).
Комментарии:
1. О .. это было так просто, но я делал это таким сложным!!!! Большое спасибо. Возможно ли любезно помочь мне в моем понимании. Почему мой скрипт печатается неправильно?
Ответ №2:
Вы можете сделать это, используя отдельные GNU AWK
substr
следующим образом, пусть file.txt
содержимое будет тогда
1981080512 14 15
2019050612 17 18
2020040912 19 95
затем
awk '{$1=substr($1,3);print}' file.txt
вывод
81080512 14 15
19050612 17 18
20040912 19 95
Объяснение: я использовал substr
функцию для получения 3-го и последующих символов из 1-го столбца и присвоения его обратно указанному столбцу, затем я print
изменил строку.
(протестировано в gawk 4.2.1)