как эффективно добавить несколько столбцов данных в файл с разделителями табуляции за один проход - PullRequest
0 голосов
/ 11 мая 2018

Пока я понял, как добавить только один столбец. У меня есть еще два столбца.Я упростил свой код здесь, но на самом деле я получаю столбцы как переменные из другого файла, и у меня есть 100 таких файлов каждые 50 МБ, которые я должен добавить эти столбцы.

Это входной файл

1|True
2|Fals

Я хочу, чтобы вывод был

1|True|2018-05-10|2018-05-11|2018-05-12
2|Fals|2018-05-10|2018-05-11|2018-05-12

Я написал это

sed -i "s/.$/|2018-05-10/" $file 

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Если у вас есть следующий входной файл:

$ more file
1|True
2|Fals

Затем вы можете использовать следующую команду sed для обработки за один проход:

DATE1=2018-05-10; DATE2=2018-05-11; DATE3=2018-05-12; sed -i "s/$/|$DATE1|$DATE2|$DATE3/" file

выход:

$ more file
1|True|2018-05-10|2018-05-11|2018-05-12
2|Fals|2018-05-10|2018-05-11|2018-05-12

Вы можете присвоить любое значение своим трем датам, используя date +%Y-%m-%d --date="SPECIFIC DAY" или любые другие значения

0 голосов
/ 11 мая 2018

РЕДАКТИРОВАТЬ: Так как даты OP не являются системными датами, они являются переменными, затем добавляются следующие.

awk -v var_1=$(var1) -v var_2=$(var2) -v var_3=$(var3) '{print $0 OFS var_1 OFS var_2 OFS var_3}' OFS="|"   Input_file

Где var_1, var_2 иvar_3 - это awk переменные, а var1, var2 и var3 - переменные bash.


С GNU date следующее может помочь вам в этом.

awk -v today=$(date +%Y-%m-%d) -v tomorrow=$(date +%Y-%m-%d --date="+ 1 day") -v day_after=$(date +%Y-%m-%d --date="+ 2 day") '{print $0 OFS today OFS tomorrow OFS day_after}' OFS="|"   Input_file

Теперь добавляем форму решения не с одним вкладышем.

awk -v today=$(date +%Y-%m-%d) -v tomorrow=$(date +%Y-%m-%d --date="+ 1 day") -v day_after=$(date +%Y-%m-%d --date="+ 2 day") '
{
  print $0 OFS today OFS tomorrow OFS day_after
}
' OFS="|"   Input_file

В случае сохранения изменений в самом файле Input_file добавьте > temp_file && mv temp_file Input_file к вышеуказанному коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...