#bash #shell #sh
#bash #оболочка #sh
Вопрос:
Я пытаюсь добавить индексную переменную в конец каждой строки файла, который у меня есть. Однако я не хочу терять escape-символы, которые у меня есть в текстовом файле, и, следовательно, не могу повторить эхо в файле снова.
Вот что я попробовал:
while read p; do
tempCom =$p
tempCom =$indexVar
echo $tempCom >> otherFile.txt
tempCom=""
done < result.txt
Что мне нужно:
Read:
"asdasdasdasdasdasd asdasd/asda"
"qweqweqweqweqweqwe qweqwe/qweq"
Output:
"asdasdasdasdasdasd asdasd/asda" 1
"qweqweqweqweqweqwe qweqwe/qweq" 2
Обратите внимание, что indexVar — это индекс, который хранится в другом месте и не обязательно соответствует строке, к которой он добавляется.
Комментарии:
1. Не могли бы вы показать небольшой образец файла indexVar?
2. @G — это просто число, которое вводится в переменную.
Ответ №1:
Ваша проблема, скорее всего, связана с проблемой цитирования. Обратите внимание на IFS=
и -r
параметр в read
инструкции тоже.
while IFS= read -r p
tempCom =$p$indexVar
printf '%sn' "$tempCom" >> otherFile.txt # Observe the quotes
tempCom=
done < result.txt
Ответ №2:
Если вы просто хотите добавить номер строки в конец, почему бы не использовать awk
?
awk '{print $0, "t", NR}' < file.txt
РЕДАКТИРОВАТЬ 1: похоже, вы хотите использовать paste тогда (при условии, что вы хотите просто присоединяться построчно)
paste file1.txt file2.txt > fileresults.txt
РЕДАКТИРОВАТЬ 2: тогда вы можете использовать sed:
sed "s|$|${indexVar}|" input
Комментарии:
1. Извините, я отредактировал сообщение, я должен был это уже сказать, но индекс не соответствует номерам строк.
2. Ваше
sed
решение работает при условииindexVar
, что оно никогда не изменяется по всему файлу и не содержит|
символов.3. Я не совсем уверен, как
indexVar
устанавливается / изменяется.4. Indexvar может измениться, поэтому опция sed нежизнеспособна. Флаг -r сделал это. Спасибо.
Ответ №3:
Используйте -r
опцию read
команды, чтобы сохранить обратную косую черту.
while read -r p; do
Комментарии:
1. @mixkat вы приняли этот ответ, хорошо, но убедитесь, что вы используете советы, найденные в моем: используйте
IFS=
и цитируйте расширениеtempCom
.2. @gniourf_gniourf Заметил! Спасибо!