2015-05-27 4 views
-1

После greping вывода команды я имею получить результат ниже:Linux Баш скрипт удаления части строки построчно

 
PAPU 0 
1000   GPRS ATTACH SUCC GB   2400  2382  2333  (10) 
1244   GPRS ATTACH FAIL GB   1216  1219  1252  (10) 
16000  GPRS ATTACH SUCC IU   986  986  1027  (10) 
16001  GPRS ATTACH FAIL IU   170  185  171  (10) 
2000   PDP-C ACTIVATION SUCC GB 5356  5138  5030  (10) 
2109   PDP-C ACTIVATION FAIL GB 13   15   54   (10) 
17000  PDP-C ACTIVATION SUCC IU 3637  3880  3887  (10) 
17001  PDP-C ACTIVATION FAIL IU 257  341  336  (10) 

Теперь я хочу, чтобы экспортировать некоторые детали в базу данных. Но я пробовал много вариантов и все неудачи. Как я знаю, чтобы получить результат ниже, я должен использовать «sed» или «awk». Как я могу получить результат ниже?

 
PAPU_0 
2400 
1216 
986 
170 
5356 
13 
3637 
257 

Спасибо.

+0

Какая исходная команда дает этот результат? Кроме того, что такое разделитель между столбцами? – fedorqui

+0

Исходная команда не является командой linux. Это другая команда, основанная на поставщиках. Сепаратор, я думаю, это TAB или SPASE. Я не уверен. – Javid

+0

Непонятно, почему 'PAPU 0' становится' PAPU_0'. Убедитесь, что исходный вход, так как это пространство между 'PAPU' и' 0' меняет вещи. – fedorqui

ответ

0

Вы можете использовать эту программу awk:

awk '{ if ($6 == "") { sub(/ /, "_", $0); print $0; } else { print $6; } }' 

Если шестой столбец не присутствует, он изменяет пространства для подчеркивания (изменение PAPU 0 к PAPU_0), а в противном случае он просто печатает шестой столбец.

+0

Это работы :) Спасибо. – Javid

+0

Это работает для каждого PAPU ... Отлично)). Большое большое спасибо. – Javid

+0

Замечание 'print $ 0' не требуется,' print' достаточно. Вы также можете сказать 'awk '{if (NF> = 6) {print $ 6} else {sub (/ /," _ ", $ 0); print}} 'file'. – fedorqui

1

Вы можете сделать это с помощью следующих шагов:

  1. сначала прочитать все строки в массиве check
  2. итерирует каждую строку вы получили в массиве

Код:

for i in "${check[@]}" 
do 
set -- $i 
# now you know that last 4th column contains the needed entries 
# lets say you stored the length of array in var `length` 
value=$(echo $(($length-3))) 
echo $value 
done 
+0

Я думаю, вы хотите сказать 'for i in '$ {check [@]}" ' – fedorqui

+0

оба будут работать. :) –

+0

Нет, ваш текущий подход не работает. Проверьте его, например, 'check = ('hello you' 'are you')'. – fedorqui

Смежные вопросы