Intereting Posts
Функция ZSH для редактирования файла на основе ввода в cli Правильное отображение японских и других специальных символов в debian linux Есть ли способ указать имя файла «/etc/apt/sources.list»? Thunar: нет шаблонов в контекстном меню Запуск Repl / CLI в фоновых и фидных командах Как экранировать символы новой строки для JSON? Установите жесткий диск под другим именем? Резервное копирование всего жесткого диска Linux Каталоги поиска и размер возвращаемого размера / дискового пространства для каждого chsh не работает в win10 sub linux Совершенно новый для Linux – запуск сервера веб-сервера / базы данных, необходимо подключиться к моим серверам – как? Как удалить пакет, созданный из источника с тем же именем другого пакета? как создать раздел в свободном пространстве с помощью GNU Parted CentOS определяет те же дату и часовой пояс для системы и MySQL Как включить прокрутку и нажатие сенсорной панели в Debian Wheezy KDE?

добавить в файл добавочный столбец идентификатора

Два вопроса:

1) Есть ли способ создать новый столбец (т.е. идентификатор) для существующего файла, содержащего данные, и новый идентификатор столбца заполняется как число с автоматическим добавлением?

например:
(Текущий файл имеет заголовки и ограничен PIPE.)

данные выглядят так

"COL1"|"COL2"|"COL3"|"COL4"|"COL5" "A1"|"B1"|"C1"|"D1"|"E1" "A2"|"B2"|"C2"|"D2"|"E2" "A3"|"B3"|"C3"|"D3"|"E3" 

хотел бы, чтобы это было похоже на

 "ID"|"COL1"|"COL2"|"COL3"|"COL4"|"COL5" "1"|"A1"|"B1"|"C1"|"D1"|"E1" "2"|"A2"|"B2"|"C2"|"D2"|"E2" "3"|"A3"|"B3"|"C3"|"D3"|"E3" 

2) Есть ли способ заменить существующий столбец столбцом New для существующего файла, содержащего данные. Новый столбец будет «ID» и будет заполняться как число, увеличивающее число?

например:
(Текущий файл имеет заголовки и ограничен PIPE.)

данные выглядят так

 "COL1"|"COL2"|"COL3"|"COL4"|"COL5" "A1"|"B1"|"C1"|"D1"|"E1" "A2"|"B2"|"C2"|"D2"|"E2" "A3"|"B3"|"C3"|"D3"|"E3" 

хотел бы, чтобы это было похоже на

 "COL1"|"COL2"|"ID"|"COL4"|"COL5" "A1"|"B1"|"1"|"D1"|"E1" "A2"|"B2"|"2"|"D2"|"E2" "A3"|"B3"|"3"|"D3"|"E3" 

Надеясь, что кто-то может помочь обеспечить решение для обоих сценариев. Я пробовал так много методов (например, awk, sed, ect) без везения.

 $ cat file "COL1"|"COL2"|"COL3"|"COL4"|"COL5" "A1"|"B1"|"C1"|"D1"|"E1" "A2"|"B2"|"C2"|"D2"|"E2" "A3"|"B3"|"C3"|"D3"|"E3" 

1)

 $ awk '{printf "\"%s\"|%s\n", NR==1 ? "ID" : NR-1, $0}' file "ID"|"COL1"|"COL2"|"COL3"|"COL4"|"COL5" "1"|"A1"|"B1"|"C1"|"D1"|"E1" "2"|"A2"|"B2"|"C2"|"D2"|"E2" "3"|"A3"|"B3"|"C3"|"D3"|"E3" 

2) переставить выход 1)

 $ awk '{printf "\"%s\"|%s\n", NR==1 ? "ID" : NR-1, $0}' file |\ awk 'BEGIN{FS=OFS="|"} {print $2,$3,$1,$4,$5,$6}' "COL1"|"COL2"|ID|"COL3"|"COL4"|"COL5" "A1"|"B1"|"1"|"C1"|"D1"|"E1" "A2"|"B2"|"2"|"C2"|"D2"|"E2" "A3"|"B3"|"3"|"C3"|"D3"|"E3" 

2) или напрямую awk

 $ awk 'BEGIN{FS=OFS="|"} {print $1,$2,NR==1 ? "ID" : "\""NR-1"\"",$3,$4,$5}' file "COL1"|"COL2"|ID|"COL3"|"COL4"|"COL5" "A1"|"B1"|"1"|"C1"|"D1"|"E1" "A2"|"B2"|"2"|"C2"|"D2"|"E2" "A3"|"B3"|"3"|"C3"|"D3"|"E3" 

Хотя вы отметили этот вопрос с помощью awk и sed, python может выполнять эту же работу так же хорошо. В приведенном ниже сценарии есть две функции для решения каждого из ваших вопросов. Комментируйте / раскомментируйте их по мере необходимости. Обратите внимание, что сценарий принимает входной файл в качестве первого позиционного аргумента в командной строке и записывает в временный файл. Раскомментируйте последнюю строку в main функции, чтобы фактически отредактировать исходный файл.

Источник скрипта

 #!/usr/bin/env python import sys import os def prepend_column(input,output): for index,line in enumerate(input): if index == 0: output.write(line) continue output.write('"' + str(index) +'"|' + line) def alter_column(input,output): for index,line in enumerate(input): if index == 0: output.write(line) continue vals = line.split('|') vals[2] = '"' + str(index) + '"' output.write('|'.join(vals)) def main(): temp = '/tmp/temp_text' with open(sys.argv[1]) as f: with open(temp,'w') as t: # alter_column(f,t) prepend_column(f,t) # uncomment line below to actually replace original file # os.rename(temp,sys.argv) if __name__ == '__main__': main() 

Demo.

Добавление столбца:

 bash-4.3$ python process_columns.py data.txt bash-4.3$ cat /tmp/temp_text "COL1"|"COL2"|"COL3"|"COL4"|"COL5" "1"|"A1"|"B1"|"C1"|"D1"|"E1" "2"|"A2"|"B2"|"C2"|"D2"|"E2" "3"|"A3"|"B3"|"C3"|"D3"|"E3" 

Изменение столбца:

 bash-4.3$ python process_columns.py data.txt bash-4.3$ cat /tmp/temp_text "COL1"|"COL2"|"COL3"|"COL4"|"COL5" "A1"|"B1"|"1"|"D1"|"E1" "A2"|"B2"|"2"|"D2"|"E2" "A3"|"B3"|"3"|"D3"|"E3"