Линуксоиды! Задачка на bash. Кто поможет?

[Удален]
302

Такая задачка:

На стандартный ввод сценария поступают строки вида: "Name : Value".

Сценарий должен поместить все имена "опций" (Name) в файл names.txt (по одному в строке), а соответствующие им значения в файл values.txt (также по одному в строке). Строки, не попадающие под этот синтаксис должны игнорироваться.

Пример:

запускаем myscript.sh

Вводим с клавиатуры:

Name : aalib

Version : 1.2

Size : 89862

aa bb cc dd ff

В файл names.txt должно записаться:

Name

Version

Size

В файл values.txt должно записаться:

aalib

1.2

89862

В итоге написал такой сценарий:

#!/bin/bash

awk '

{

FS=" : "

print $1 > "names.txt"

print $2 > "values.txt"

}'

Но в нём небольшой косяк. Незнаю почему, но первую введенную строку он не правильно обрабатывает.

Как можно иначе написать? Или в чём косяк?

cymax
На сайте с 28.08.2007
Offline
16
#1

Косяк в том, что вы переопределяете FS уже после того, как прочитана и разбита на поля первая строчка. Правильно будет так

BEGIN { FS = " : " }

{

print $1 >> "names.txt"

print $2 >> "values.txt"

}

или так

awk -F " : " '

{

print $1 > "names.txt"

print $2 > "values.txt"

}'

А такой FS = " *: *" , наверное, еще лучше :)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий