Как я могу помешать awk добавлять новые строки в матч? - PullRequest
3 голосов
/ 10 сентября 2011

Я пишу сценарий bash для анализа некоторых полей из текстового файла с разделителями табуляции и добавления их к имени файла самого файла. Я могу разобрать поля, используя awk, но они идут с добавленной новой строкой. Я хотел бы либо убрать эти новые строки из результата, либо в идеале не допустить, чтобы awk добавил их в первую очередь. Пример кода с эхом из сохраненной строки на данный момент:

#!/bin/bash
echo "Usage: sh extract.sh filename.txt (or *.txt)"

for filenam in "$@"
do
timestring=$(awk 'BEGIN{ FS="\t"; RS="\n"; ORS="_"; OFS="_"}
    /Conditions/ {printf $2}
    /Date/ {printf $2}
    /Time/ {printf $2}
    END {}' $filenam)
echo $timestring

done

В данный момент, каждый раз, когда он находит совпадение, он перезаписывает все предыдущие совпадения, потому что \ n добавляется в конец строки. Как мне это предотвратить? (так что у меня есть условие_дата_ времени в виде строки без каких-либо символов новой строки).

Извините, если это кажется простым вопросом, но я часами гуглял, пробовал разные вещи, и я в тупике. Спасибо!

Ответы [ 3 ]

1 голос
/ 10 сентября 2011

В вашем скрипте используйте print вместо printf, например print $2.

Что касается перезаписи, это может произойти, если текстовый файл, который вы обрабатываете, имеет \r\n окончания строк вместо \n. Если это так, установите разделитель входной записи на \r\n, например, RS="\r\n".

1 голос
/ 10 сентября 2011

перед передачей файла на awk, сделайте dos2unix для вашего файла

0 голосов
/ 10 сентября 2011

Попробуйте что-то вроде

#!/bin/bash
echo "Usage: sh extract.sh filename.txt (or *.txt)"

for filenam in "$@"
do
timestring=$(awk 'BEGIN{ FS="\t"; RS="\n"; ORS="_"; OFS="_"}
    /Conditions/ { cond=$2 }
    /Date/ { date=$2 }
    /Time/ { time=$2 }
    { if (length(cond) && length(date) && length(time)) {
          print cond "_" date "_" time;
          cond = ""; date=""; time=""
      }
    }
    END {}' $filenam)
echo $timestring

done

Это не проверено, но вы должны понять.

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