У меня есть файл с четырьмя столбцами, разделенными "|" как показано ниже
23414|test doc for me||
32322|test doc for you|2004_12_03|
13454|test doc for all||2010_11_01
Я пытаюсь вставить текущую системную дату в пустые столбцы, чтобы выходные данные выглядели как
23414|test doc for me|2018_04_03|2018_04_03
32322|test doc for you|2004_12_03|2018_04_03
13454|test doc for all|2018_04_03|2010_11_01
ниже приведен код, который я пробовал
for file in `ls -rlt Added_to_* | awk '{print $9}'`
do
now="$(date +'%Y/%m/%d')"
echo "Running for: $file"
awk -F'|' -v curr="$now" '{
if( $3=="" || $4=="" ){
if ( $3=="" ) { print "$curr"}
if ( $4=="" ) { print "$curr"}
}else
do_something ;
}' $file
done
linux
shell-script
text-processing
date
shrawan
источник
источник
+'%d/%m/%Y'
не соответствует формату даты, который вы хотите, и что находитсяdo_something
в блоке else?Ответы:
Во-первых, нет необходимости анализировать выходные данные
ls
или даже использовать цикл оболочки вообще - посколькуawk
может читать и обрабатывать список файлов.Другая проблема заключается в том, как вы ссылаетесь на переданную переменную:
$curr
просто должно бытьcurr
($curr
будет ссылаться на пронумерованное полеcurr
- если такая вещь существует). Также нет необходимости дважды проверять пустоту полей.Так
источник
Мы используем регулярные выражения lookbehind / lookahead, чтобы сосредоточиться на POI (интересующие позиции), где произойдет замещение. Оказавшись там, мы помещаем текущую дату, используя
Perl's
встроеннуюlocaltime
функцию. 3-е, 4-е и 5-е поля - это данные дня / мм / гг, к которым мы добавляем необходимые константы, чтобы получить сегодняшнюю дату. К году, который мы добавляем1900
, к 1 месяцу и 0 к дню,источник
как говорит Костас
должен помочь вам.
PS. Сожалею. Похоже, вы не используете двойную черту для разделения. Дай мне подумать...
источник
sed ":a;s/|\(|\|$\)/|$(date +%Y_%m_%d)\1/;ta"