Если вы просто хотите соединить два компьютера с помощью базовой программы, такой как nc, вы можете перенаправить с / на / dev / tcp /
.
Это не настоящие устройства, а выдумка, созданная bash, поэтому такие вещи, как cat / dev / tcp / foo / 19
, не будут работать, но cat dev / tcp / foo / 19
будет.
Хотя вы отметили этот вопрос с помощью 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()
Добавление столбца:
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"
$ 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"