Если вы используете какой-нибудь текстовый редактор, попробуйте использовать только один:
awk -F ".scheduleName." '
NR==1{printf "%s ", FILENAME}
NR<4{printf "%s ",$2}
END{print""}' $(ls -t | head -1)
Я надеюсь, что есть более 1 ScheduleName
в строке, чтобы удалить первые и последние символы со второго поля?
У меня нет nawk
, но это работает для меня (с gawk
, с использованием переключателя - posix
):
awk 'BEGIN{FS=OFS=","}{sub(/0568/,"0808",$3)}1' file
комментарий fedorqui предполагает, что вам может потребоваться использовать -v OFS = ', '
, а не -vOFS =', '
, но если разделители ввода и вывода совпадают, назначение в блоке BEGIN
не намного длиннее. Я также изменил ваш gsub
на sub
, поскольку похоже, что вы хотите сделать только одну замену. Первым аргументом любой функции является регулярное выражение, поэтому вы не должны передавать ему строку.
Вывод:
"20131008","0004","0808","98"
Этот ответ демонстрирует примеры awk
и sed
, как в выводе командной строки, так и в изменении файлов.
Для awk
мы используем $ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
и получим измененную строку в выводе командной строки (или в переменную), но исходный файл не изменится.
$ cat input.txt
"20131008","0004","0568","98"
$ awk -F"," '{gsub("0568", "0808", $3)}1' input.txt
"20131008" "0004" "0808" "98"
Для sed
будем использовать простую форму sed -i 's/string to replace/new string/g' input.txt
, где -i
флаг для изменения (т.е. модификации исходного файла).
$ cat input.txt
"20131008","0004","0568","98"
$ sed -i 's/0568/0808/g' input.txt
$ cat input.txt
"20131008","0004","0808","98"
Хотя это не то, что вы просили в nawk
(у меня он не установлен), надеюсь, вы найдете это полезным.
Я пробовал это:
nawk 'BEGIN { FS=OFS="," } { sub("0568","0808",$3) }1' abc.txt
Он работает нормально.