Awk отображает имя файла дважды (?!) - PullRequest
0 голосов
/ 16 февраля 2011

Привет.

У меня есть файлы, которые содержат одиннадцать полей в имени файла.Каждый файл имеет конкретное значение.Моя работа состоит в том, чтобы перечислить каждое имя файла и загрузить информацию в таблицу базы данных для отчетов.

Мой код awk делает это (файлы имеют суффикс VER):

find . -name "*.VER" -exec ls '{}' ';' -printf %f\\t | awk -F"~" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$0}' > somefile.tab

Работает нормально, кромечто он делает что-то странное с именем файла ($ 0): он повторяет это примерно так (2 последние поля справа):

RRR1    PRE DTV_PREP    PREP05  JGM15453.   26  P   H23-600 029416589165    20110216    RRR1~PRE~DTV_PREP~PREP05~JGM15453.~26~P~H23-600~029416589165~20110216~090353.VER    ./RRR1~PRE~DTV_PREP~PREP05~JGMDTV269~33~P~H21-200~029384120357~20110216~091829.VER

Если я уберу ключ "% f" из оператора printf,Кажется, это работает, но если я оставлю это в покое и удалим $ 0, имя файла никогда не будет отображаться.Чего здесь не хватает?Есть идеи?

Спасибо за ваш вклад.

1 Ответ

3 голосов
/ 16 февраля 2011

awk не печатает его дважды, find из-за ls и -printf.Я не вижу причины для -exec ls '{}' ';' в любом случае.Вы можете просто удалить его следующим образом:

find . -name "*.VER" -printf "%f" | awk -F"~" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$11"\t"$0}'

Кстати, вы можете значительно упростить свой код, например, так:

find . -name "*.VER" -printf "%f" | awk -F'~' '{for(i=1;i<=NF;i++)printf("%s\t",$i)}1'

Примечание , чтовы пропустили 11-е поле $11 в вашем коде.Оба моих ответа распечатают это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...