Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / задачка по shell скриптам ( отброс пробелов ) / 5 сообщений из 5, страница 1 из 1
10.12.2004, 11:35
    #32822632
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка по shell скриптам ( отброс пробелов )
такая задачка
есть текстовый файл file.txt, состоит из трех полей разделенных запятой
10 , Елена Владимировна , Иванова
необходимо преобразовать его скриптом так, чтобы небыло пробелов слева и справа в каждом поле, т.е. так
10,Елена Владимировна,Иванова

дожна быть команда типа такой
Код: plaintext
1.
2.
3.
stat:oracle>cat file.txt | awk -F, '{printf("%d,%s,%s\n",$1,$2,$3)}'
 10 ,    Елена Владимировна  ,  Иванова
stat:oracle>
но вот что то не могу найти в awk ф-ий типа ltrim и rtrim для строковых значений
а может быть еще как то можно?
:)
...
Рейтинг: 0 / 0
10.12.2004, 14:45
    #32823357
Tiv
Tiv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка по shell скриптам ( отброс пробелов )
Может можно sed`ом? Если можно, то
Код: plaintext
cat test.txt| sed 's/ *, */,/g; s/^ *//g; s/ *$//g'
...
Рейтинг: 0 / 0
10.12.2004, 14:47
    #32823367
Somebody2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка по shell скриптам ( отброс пробелов )
sanek842такая задачка
есть текстовый файл file.txt, состоит из трех полей разделенных запятой
10 , Елена Владимировна , Иванова
необходимо преобразовать его скриптом так, чтобы небыло пробелов слева и справа в каждом поле, т.е. так
10,Елена Владимировна,Иванова

дожна быть команда типа такой
Код: plaintext
1.
2.
3.
stat:oracle>cat file.txt | awk -F, '{printf("%d,%s,%s\n",$1,$2,$3)}'
 10 ,    Елена Владимировна  ,  Иванова
stat:oracle>
но вот что то не могу найти в awk ф-ий типа ltrim и rtrim для строковых значений
а может быть еще как то можно?
:)

На вскидку (если средствами awk, для произвольного числа полей):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
echo "10,    Елена Владимировна  ,  Иванова "  | awk -F, \
 '{ \
   for (i=1;i<NF;i++) { \
     gsub(/^[\x20]+/,"",$i); \
     gsub(/[\x20]+$/,"",$i); \
     printf("%s,",$i)\
   };  \
   gsub(/^[\x20]+/,"",$i); \
   gsub(/[\x20]+$/,"",$i); \
   printf "%s\n", $i; \
 }'

Но наверняка есть методы получше.
...
Рейтинг: 0 / 0
10.12.2004, 15:11
    #32823438
Tiv
Tiv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка по shell скриптам ( отброс пробелов )
Код: plaintext
1.
2.
3.
4.
5.
cat ./test.txt | awk -F, \
     '{gsub(/ *, */,","); \
      gsub(/ *$/,""); \
      printf("%d,%s,%s\n",$1,$2,$3)}
     '
Забыл про gsub.
...
Рейтинг: 0 / 0
10.12.2004, 15:36
    #32823530
sanek842
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задачка по shell скриптам ( отброс пробелов )
О, оно!!!
пожалуй с sed даже всех проще будет :)

поздно заглянул в свой топик,успел уж на яве наваять :)
чтож, ради интереса тоже приведу код :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
import java.io.*;
public class spacefilter
{
  public static void main(String[] args)
  {
    String[] arr;

    if ( args.length !=  2  )
    {
        System.out.println("Usage : <oldfile> <newfile>");
        System.exit(- 1 );
    }

    String inFile = args[ 0 ];  // "/home/oracle/test/file.txt";
    String outFile = args[ 1 ]; // "/home/oracle/test/file.dat";

    try
    {
      BufferedReader br = new BufferedReader( new FileReader(inFile) );
      PrintWriter pw = new PrintWriter(new FileWriter(outFile));
      String s;
      while ((s=br.readLine())!=null)
      {
       if ( s.length() ==  0  ) continue;
       arr = s.split(",");
       for (int i= 0 ; i<arr.length; i++ )
         pw.write( ((i> 0 )?",":"") + arr[i].trim());
       pw.write("\n");
      }
      br.close(); pw.close();
    } catch ( FileNotFoundException fn )
    {
      System.out.println("невозможно открыть файл : "+ inFile);
    } catch ( IOException ioex )
    {
      System.out.println("Ошибка ввода.выода");
    }
  }
}

javac spacefilter.java
java spacefilter file.txt file.dat


Придется подучить sed+awk

Спасибо!
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / задачка по shell скриптам ( отброс пробелов ) / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]