Рейтинг:0

Чтение файлов с помощью LOOP в сценарии Bash?

флаг ad

Я надеюсь, что кто-то может объяснить мне, что происходит в этой ситуации и как ее решить.

Я пытаюсь сделать простую вещь: читать каждую строку из текстового файла с циклом.

Это содержимое текстового файла, над которым я работаю:

аааа аааа ааа
бббббббббб б
cccccccc c c c

ПРИМЕЧАНИЕ. Это простой файл, предназначенный только для проверки концепции. Основной текстовый файл, над которым я работаю, имеет размер около 140 МБ с позиционным макетом для каждого поля.

Это содержимое моего скрипта bash:

ФАЙЛ=./text.txt

awk '{печать}' $FILE | при чтении ROW; делать
    эхо $строка
сделано

Я получаю каждую строку из файла, но вот результат:

аааа аааа ааа
бббббббббб б
cccccccc c c c

Как видите, лишние пробелы удаляются из вывода.

Я пытаюсь протестировать этот скрипт, используя аук, но я уже пробовал с кот и стандартный вывод и был тот же результат:

ФАЙЛ=./text.txt

# кот
кот $ФАЙЛ | при чтении ROW; делать
    эхо $строка
сделано

##########

# стандартный вывод
при чтении ROW; делать
    эхо $строка
сделано < $ФАЙЛ

Я также пытался использовать для петли:

для ROW в $(awk '{print}' $FILE); делать
    эхо $строка
    эхо "---"
сделано

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

аааа
---
аааа
---
а
---
аа
---
бб
---
бббб
---
бббб
---
б
---
cccccccc
---
с
---
с
---
с
---

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

Мне было интересно, может ли кто-нибудь объяснить мне, почему лишние пробелы были удалены и как печатать / работать с полным содержимым строки (с любыми дополнительными пробелами)?

флаг hr
`echo $ROW` должно быть `echo "$ROW"` - см. [bash - Когда необходимо двойное цитирование?](https://unix.stackexchange.com/a/68748/65304). Также вы, вероятно, захотите использовать `IFS= read -r ROW`, а не просто `read ROW`.
jpbrain avatar
флаг ca
Вот и ответ ^^^^^^^^ (стальной машинист). Аргументы разные с кавычками.
Leandro Mana avatar
флаг ad
Спасибо большое ребята за помощь!!! Это сработало = Д. Теперь я буду обращать внимание на цитаты. Еще раз спасибо

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.