Добавление новых столбцов в файл csv

Вы можете добавить параметр -T5 , чтобы увеличить скорость сканирования. Согласно nmap Timing and perfermance рекомендуется использовать параметр -T4 :

Я бы рекомендовал всегда использовать -T4. Некоторым нравится -T5, хотя на мой вкус он слишком агрессивен. Люди иногда указывают -T2, потому что они думают, что это менее вероятно приведет к сбою хостов, или потому что они считают себя вежливыми в целом.Они часто не понимают, насколько медленным на самом деле является -T вежливо. Их сканирование может занять в десять раз больше времени, чем сканирование по умолчанию. Сбои в работе машины и проблемы с пропускной способностью при использовании параметров синхронизации по умолчанию (-T3) возникают редко, поэтому я обычно рекомендую это для осторожных сканеров. Пропуск определения версии намного эффективнее, чем игра со значениями времени для уменьшения этих проблем.

2
05.07.2016, 11:07
2 ответа

С awk :

#!/usr/bin/awk -f

BEGIN { OFS="," };

FNR==1 {
  split(FILENAME,c,/[_.]/);
};

{ print c[1], c[2], $0 }

Или как однострочник для запуска из командной строки или встраивания в сценарий оболочки:

awk -v OFS=',' 'FNR==1 {split(FILENAME,c,/[_.]/)}; {print c[1],c[2],$0}' *.csv

Для каждого входного файла это разбивает каждое ИМЯ ФАЙЛА на массив c с использованием класса символов [_.] в качестве разделителей полей. Поля 1 и 2 массива c добавляются к каждой строке файла.

Пример вывода:

$ ./zsha.awk exam_20.csv 
exam,20,1,2,3,4
exam,20,5,6,7,8
exam,20,9,10,11,12

В примере использовались следующие входные данные:

$ cat exam_20.csv 
1,2,3,4
5,6,7,8
9,10,11,12
4
27.01.2020, 21:56

Этот код должен сделать это с помощью sed, сохранить его как исполняемый файл и запустить с полным путем к исходному файлу в качестве первого (и единственного) параметра. Вы можете сохранить результат в новый файл, если хотите.

#!/bin/bash
FILE=$1
# check the file exists
[[ -s $FILE ]] || { echo "Can't locate file '$FILE', aborting" >&2; exit 1; }
# get the filename without directory
NAME=$(basename "$1")
# get the first 4 characters as FIRST
FIRST=${NAME:0:4}
# get the 6th & 7th characters as SECOND
SECOND=${NAME:5:2}
# are we good to go?
read -t30 -p "About to prefix '$FIRST,$SECOND,' to all lines in $FILE - ok (y/-): "
[[ $REPLY == "y" ]] || { echo "No changes made"; exit 0; }
# do it
sed "s/^/$FIRST,$SECOND,/" "$FILE"
exit 0

файл exc_02:

line1,some,stuff
line2,some,more,stuff

вывод:

exam,02,line1,some,stuff
exam,02,line2,some,more,stuff
2
27.01.2020, 21:56

Теги

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