shell script

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

mozi
Сообщения: 1

shell script

Сообщение mozi »

Приветствую всех.
Есть текстовый файл со списком значений:
v1,v2,v3...

нужен тот же файл в следующем формате:

Имя1: v1
Имя2: v2
Имя3: v3
...
(имена полей задаются в ручную)
Помогите плз
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: shell script

Сообщение SLEDopit »

Код: Выделить всё

 $ cat 1
v1
v2
v3

 $ cat 2
Name1
Name2
Name3

 $ join <(cat -n 2) <(cat -n 1) | sed 's/^[^ ]* //'
Name1 v1
Name2 v2
Name3 v3
Я всё правильно понял?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -

Re: shell script

Сообщение sgfault »

SLEDopit писал(а):
01.03.2012 10:45

Код: Выделить всё

$ join <(cat -n 2) <(cat -n 1) | sed 's/^[^ ]* //'

Наверное, sed можно выкинуть:

Код: Выделить всё

$ join -o 1.2,2.2 <(cat -n 2) <(cat -n 1)

А вот как избавиться от зависимости от bash-a (process substitution), не используя файлы..
UPD.
Хм, а здесь и правда нужен join?

Код: Выделить всё

$ paste 2 1

Разве не то же самое?
Спасибо сказали:
Аватара пользователя
kontur
Сообщения: 23
ОС: CentOS, Debian

Re: shell script

Сообщение kontur »

Код: Выделить всё

#!/bin/bash

hFile="./$1";

buffer=`cat $hFile | tr ',' '\n'`;

echo -n "" >$hFile"_tmp";

for arg in $buffer
do
  mstr=`echo $arg | sed "s/ *$//" | sed "s/^ *//"`;
  echo -n "name $mstr: "; read name
  echo "$name: $mstr" >>$hFile"_tmp";
done

mv -f $hFile"_tmp" $hFile;


использование ...
./script.sh tst.txt
name v1: n1
name v2: n2
name v3: n3
name v4: n4

результат:
n1: v1
n2: v2
n3: v3
n4: v4
Спасибо сказали: