Как добавить слова к существующему столбцу

$ echo '1,2,subjects,\mat\hs,unix\,\Nato,\N,123,\N'   | 
         sed -r -e 's/\\N/XELI/g' | 
         sed -e 's/\\/#/g' | 
         sed -e 's/XELI/\\N/g'
1,2,subjects,#mat#hs,unix#,\Nato,\N,123,\N

Я нахожу, что он больше четко разделяет его:

  • замените \N некоторыми не происходящий символ,
  • затем замените / #
  • и замените/N назад
3
03.08.2014, 11:34
2 ответа

Это именно то, в чем хорош awk :

awk -F'\t' -vOFS='\t' '{ $9 = "test=" $9 ";" }1'

-F '\ t' указывает ему использовать поля, разделенные табуляцией. -vOFS = '\ t' указывает ему также использовать вкладки в выводе. Фактическое его тело - последний аргумент: это небольшая программа, которая говорит, что для каждой строки необходимо изменить значение $ 9 (девятое поле) на конкатенацию «test =», его исходное значение и ";". Мы оставляем все остальные поля нетронутыми. Последний 1 указывает awk выводить новую строку, даже если мы что-то с ней сделали.

Если я дам ему ваш ввод (со вставленными вкладками):

$ cat data
1   2   3   4   5   6   7   8   text    still more text in this column 10
1   2   3   4   5   6   7   8   text2   still more text in this column 10

, то я могу запустить указанную выше команду:

$ awk -F'\t' -vOFS='\t' '{ $9="test=" $9 ";" }1' < data
1   2   3   4   5   6   7   8   test=text;  still more text in this column 10
1   2   3   4   5   6   7   8   test=text2; still more text in this column 10

и получить желаемый результат. Вы можете сохранить это в файл с перенаправлением > :

$ awk -F'\t' -vOFS='\t' '{ $9="test=" $9 ";" }1' < data > processed-data
4
27.01.2020, 21:11

В GNU sed :

sed 's/[^\t]*/text=&;/9'

то есть замените 9-ю последовательность символов без табуляции на text = &; (где & означает совпавшую часть).

В системах с другими реализациями sed вам может потребоваться ввести символ табуляции буквально вместо \ t .

4
27.01.2020, 21:11

Теги

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