#awk
#awk
Вопрос:
ОК. у меня есть это, которое работает. ура!
awk '/string/ { print $0 }' file1.csv | awk '$2=$2 (int(rand()*10))' > file2.csv
но я хочу, чтобы контекст моего файла также печатался в file2.csv. эта программа печатает только строки, содержащие мою строку, что хорошо, это начало.
я бы сделал, но я не могу просто применить операцию к значениям в 2 доллара в каждой строке, потому что значения в 2 доллара в строках, которые не содержат мою строку, не подлежат изменению.
итак, я хочу, чтобы исходное содержимое (file1.csv) оставалось нетронутым с единственной разницей, заключающейся в скорректированном значении в 2 доллара в строках, соответствующих моей строке.
кто-нибудь может мне помочь? Спасибо.
И вот 4 строки из исходного csv:
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30720, String, 0, 76, 100
2, 32620, String, 0, 76, 0
Ожидаемый результат тот же, за исключением небольших изменений до 2 долларов:
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30725, String, 0, 76, 100
2, 32621, String, 0, 76, 0
Комментарии:
1. Хорошим началом было бы показать несколько проверяемых строк из
file1.csv
и ожидаемый результат.2. надеюсь, это поможет @JamesBrown
Ответ №1:
$ awk 'BEGIN{FS=OFS=", "} /String/{$2 =int(rand()*10)}1' file
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30722, String, 0, 76, 100
2, 32622, String, 0, 76, 0
вероятно, вам также нужно инициализировать начальное значение rand в блоке BEGIN, иначе вы всегда будете получать одну и ту же последовательность rand.
Комментарии:
1. Спасибо. просто осознаю это также. прямо сейчас я использую:
awk -v rnd1=$((RANDOM)) '$3 ~ /String/ { $2=$2 (srand(rnd1)) } { print $0 }' test.csv
2. как вы сохраняете запятую неповрежденной?
3. установите OFS таким же, как FS; проверьте блок BEGIN.
Ответ №2:
Что-то вроде этого, может быть:
$ awk -F", " -v OFS=", " '$3 ~ /String/ { $2=$2 (int(rand()*10))} { print $0 }' file1.csv
2, 0, Control, 0, 7, 1000
2, 0, Control, 0, 10, 540
2, 30722, String, 0, 76, 100
2, 32622, String, 0, 76, 0
Комментарии:
1. извините. при ближайшем рассмотрении это работает не так, как мне нужно. это удаляет запятые из строк и добавляет денежный символ к другим.
2. Моя ошибка, исправлено.