Чтение данных из файла с использованием awk - PullRequest
2 голосов
/ 03 апреля 2012

Я новичок в создании сценариев оболочки и пытаюсь прочитать данные из txt-файла в следующем формате.

A: 1, 2, 3, 4

B: 1,2; 3, 4

Вот мой код:

awk -F':/,/;/ ' '{ echo $2 $3 $4 $5 $5 }' -f 'testread.txt'

Мне просто нужны цифры из текстового файла.Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Есть несколько проблем с вашей командой.

  1. Аргументом для опции -F является регулярное выражение, которое задает желаемые разделители. Чтобы выбрать двоеточия, запятые или точки с запятой в качестве разделителей, вам нужно использовать символы, а не косую черту. В качестве альтернативы вы можете использовать выражение в скобках.

  2. Оператор AWK для вывода текста имеет вид print, а не echo.

  3. Параметр -f указывает файл, содержащий программу AWK, а не входной файл. Вам не нужно -f для указания входного файла.

Вы хотите что-то похожее на это:

awk -F '[:,;]' '{ print $2 $3 $4 $5 }' testread.txt
2 голосов
/ 03 апреля 2012

Самый простой способ, вероятно, состоит в том, чтобы просто сделать ваш разделитель полей " чем-либо, что не является числовым ".

[ghoti@pc ~]$ cat input.txt 
A: 1, 2, 3, 4
B: 1,2; 3, 4
[ghoti@pc ~]$ awk -F'[^0-9]+' '{$1=$1; print;}' input.txt 
 1 2 3 4
 1 2 3 4
[ghoti@pc ~]$ 

Бит $1=$1 просто заставляет awk переписать$0 с использованием разделителя полей вывода по умолчанию.

Обновление:

Более явный вывод:

[ghoti@pc ~]$ awk -F'[^0-9]+' '{printf("1=%s 2=%s 3=%s 4=%s 5=%s\n", $1, $2, $3, $4, $5);}' input.txt 
1= 2=1 3=2 4=3 5=4
1= 2=1 3=2 4=3 5=4
[ghoti@pc ~]$ 
...