powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / задачка по shell скриптам ( отброс пробелов )
5 сообщений из 5, страница 1 из 1
задачка по shell скриптам ( отброс пробелов )
    #32822632
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 для строковых значений
а может быть еще как то можно?
:)
...
Рейтинг: 0 / 0
задачка по shell скриптам ( отброс пробелов )
    #32823357
Tiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tiv
Гость
Может можно sed`ом? Если можно, то
Код: plaintext
cat test.txt| sed 's/ *, */,/g; s/^ *//g; s/ *$//g'
...
Рейтинг: 0 / 0
задачка по shell скриптам ( отброс пробелов )
    #32823367
Somebody2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
задачка по shell скриптам ( отброс пробелов )
    #32823438
Tiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Tiv
Гость
Код: plaintext
1.
2.
3.
4.
5.
cat ./test.txt | awk -F, \
     '{gsub(/ *, */,","); \
      gsub(/ *$/,""); \
      printf("%d,%s,%s\n",$1,$2,$3)}
     '
Забыл про gsub.
...
Рейтинг: 0 / 0
задачка по shell скриптам ( отброс пробелов )
    #32823530
sanek842
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, оно!!!
пожалуй с 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
5 сообщений из 5, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / задачка по shell скриптам ( отброс пробелов )
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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