Как извлечь второй и третий столбцы из CSV-файла с помощью awk?

Вы должны понимать, что \{ является особенным в sed. Итак, вам нужно это:

#!/bin/sh
# filename: yourscript.sh
# usage: ./yourscript.sh 44 33 22
for arg; do set "$@" " 0x$arg"; shift; done
IFS=",";
sed -e "/byte address\[\]/s/{[^}]*}/{$* }/"  yourfile.c

Результат

When invoked as:
%   ./yourscript.sh 44 33 22
byte address[] = { 0x44, 0x33, 0x22 };

Объяснение

  1. Первая задача — получить шестнадцатеричные числа из аргументов. Это мы получаем, перебирая список аргументов, используя цикл for. Каждый раз мы добавляем шестнадцатеричную версию текущего аргумента в конец списка аргументов $@, в то же время удаляя текущий аргумент shift из начала списка. список. Это означает, что в конце итераций цикла for мы получим шестнадцатеричный список аргументов.
  2. Теперь мы устанавливаем IFS на запятую для соединения аргументов с запятой.
  3. Код sed вводит список "$*" внутри замещающей части sed s///.
0
30.06.2017, 18:40
2 ответа

awkнужно знать разделитель ,. Таким образом, вы должны выполнить команду таким образом:

awk -F\, '{printf "update my_table_user set thirdparty_user_id=\'%s\' where thirdparty_user_id=\'%s\'\;", $(NF-1),$(NF)}' /tmp/Region1\ users.csv

Также, если формат входного файла соответствует (трем полям, вы получите 1-е и 2-е )вы можете использовать $1и$2

2
28.01.2020, 02:25

В этом случае вам нужно действовать осторожно, так как у вас есть два слоя чередующихся кавычек:

        |-------------------------- 1 ------------------------|--2 --|------------- 3 ----------|--4 --|----- 5 ----|
awk -F, '{printf "update my_table_user set thirdparty_user_id='\'%s\'' where thirdparty_user_id='\'%s\'';\n", $2,$3}' yourcsvfile

Обратите внимание, что области 2 и 4 являются пробелами (без кавычек ), и туда мы вставляем наши одинарные кавычки и строки %s. Области 1,3,5 являются сбалансированными парами в одинарных кавычках. Области 1..5 являются смежными. Мы можем поместить %s в пробел как есть, поскольку они не являются метасимволами оболочки, такими как *? $ [ иначе нам пришлось бы экранировать их или помещать в непробельные области, такие как 3.

Другим способом является предоставление цитаты через переменную awk:

awk -F, -v q=\' '{v2=q $2 q;v3=q $3 q;printf "update my_table_user set thirdparty_user_id=%s where thirdparty_user_id=%s;\n", v2,v3}' yourcsvfile

Здесь мы сначала создаем одиночные -кавычки, заключенные в кавычки, и затем используем их в нашем printf. Я считаю, что это более удобно -для пользователя.

1
28.01.2020, 02:25

Теги

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