Добавить индексную переменную в конце каждой строки

#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 Заметил! Спасибо!