Удалить строковый файл после пространства

Очень универсальная версия do ... в то время как имеет следующую структуру:

while 
      Commands ...
do :; done

Пример:

#i=16
while
      echo "this command is executed at least once $i"
      : ${start=$i}              # capture the starting value of i
      # some other commands      # needed for the loop
      (( ++i < 20 ))             # Place the loop ending test here.
do :; done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "

Как есть (для не задано значение i ) цикл выполняется 20 раз.
UN-Комментарий к строке, которая устанавливает i равным 16 i = 16 , цикл выполняется 4 раза.
Для i = 16 , i = 17 , i = 18 и i = 19 .

Если i установлен в (скажем, 26) в той же точке (начале), команды все равно будут выполняться в первый раз (до тех пор, пока не будет проверена команда прерывания цикла).

Тест какое-то время должен быть правдивым (статус выхода 0).
Тест должен быть отменен для цикла до, т. Е .: быть ложным (статус выхода не равен 0).

Для работы версии POSIX необходимо изменить несколько элементов:

i=16
while
       echo "this command is executed at least once $i"
       : ${start=$i}              # capture the starting value of i
       # some other commands      # needed for the loop
       i="$((i+1))"               # increment the variable of the loop.
       [ "$i" -lt 20 ]            # test the limit of the loop.
do :;  done
echo "Final value of $i///$start"
echo "The loop was executed $(( i - start )) times "

./script.sh
this command is executed at least once 16
this command is executed at least once 17
this command is executed at least once 18
this command is executed at least once 19
Final value of 20///16
The loop was executed 4 times 
1
09.08.2018, 01:15
3 ответа

Использованиеawk:

awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input

Это разделит 4-й столбец пробелами, а затем установит его в первый элемент.


Должно работать независимо от того, что находится в 4-м столбце:

$ cat input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test name;somewhere

$ awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test;somewhere
1
27.01.2020, 23:23

Чтобы удалить текст «Армани» из файла, используйте:

$ sed 's/Armani//' myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$

Для редактирования на месте:

$ sed -i 's/Armani//' myfile
$ cat myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$

Если вы хотите удалить все вхождения слова «Армани» в одной строке, добавьте g, например.sed 's/Armani//g'

1
27.01.2020, 23:23

Кошка бессмысленна, так что может идти. Идентификатора нет в вашем образце ввода, поэтому давайте предположим, что вы имели в виду blabla. Ваш запрос на удаление фамилии пользователя кажется совершенно не связанным с вашей командой примера, поэтому давайте просто изменим это

grep blabla file.log | perl -pe 's/ [^ ;]+;/;/g' > newfile.log

Если это не дает вам того, чего вы хотите, вы должны переформулировать свой вопрос так, чтобы он был понятен.

1
27.01.2020, 23:23

Теги

Похожие вопросы