Обработка ошибок проверки столбцов Bash Shellscript - PullRequest
0 голосов
/ 18 сентября 2018

Я пишу Bash Shellscript.Мне нужно проверить файл, если $ value1 содержит $ value2.$ value1 - это номер столбца (1, 4, 5 в качестве примера), а $ value2 ($ value2 может быть «03», «04», «09» и т. д.) - это искомая строка.Если столбец содержит значение $ value2, выполните перемещение файла в каталог ошибок.Мне было интересно, каков наилучший подход к этому.Я думал awk или есть другой способ?

$ value1 и $ value2 хранятся в файле конфигурации.У меня есть контроль над тем, какой формат я могу использовать.Вот пример.Разделитель файлов - Octal \ 036.Я только что изобразил с |ниже.

Пример

$value1=5
$value2=04

Ввести example1.txt

 example|42|udajha|llama|04
 example|22|udajha|llama|02 

Ввести example2.txt

example|22|udajha|llama|02 

Результат переместить example1.txt в/ home / user / error_directory и example2.txt остаются в текущем каталоге (ничего не происходит)

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

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

В моем опыте с данными я использовал двоеточие, а не трубу, потому что это позволяет мне избежать escape с помощью команды 'cut'.

Изменение файлов данных на:

cat example1.txt
example:42:udajha:llama:04
example:22:udajha:llama:02

Я бы написал так: (добавив -x, чтобы вы могли видеть обработку, но в вашем коде она вам не нужначтобы сделать это.)

[root@]# cat mysript.sh
    #!/bin/sh -x
one=`cat example1.txt | cut -d: -f5`
two=`cat example2.txt | cut -d: -f5`

for i in $one
do
if [ $i -eq $two ]
     then
      movethis=`grep $two example1.txt`
      echo $movethis >> /home/me/error.txt
fi
done

cat /home/me/error.txt
[root@]# ./mysript.sh
++ cat example1.txt
++ cut -d: -f5
+ one='04
02 '
++ cat example2.txt
++ cut -d: -f5
+ two=02
+ for i in '$one'
+ '[' 04 -eq 02 ']'
+ for i in '$one'
+ '[' 02 -eq 02 ']'
++ grep 02 example1.txt
+ movethis='example:22:udajha:llama:02 '
+ echo example:22:udajha:llama:02
+ cat /home/me/error.txt
example:22:udajha:llama:02

Вы можете использовать любую живую команду для перемещения вашего контента.Коснитесь, CP, MV, что вы хотите использовать там.

0 голосов
/ 18 сентября 2018

awk может сообщить, какие файлы удовлетворяют этому условию:

awk -F"|" -v columnToSearch=$value1 -v valueToFind=$value2 '$columnToSearch==valueToFind{print FILENAME}' example1.txt example2.txt

Затем вы можете сделать mv на основании этого.

Пример использования канала для xargs (сменьшие имена переменных, так как вы уже поняли идею):

awk -F"|" -v c=$value1 -v v=$value2 '$c==v{print FILENAME}' example1.txt example2.txt | xargs -I{} mv -i {} /home/user/error_directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...