sed 또는 awk를 사용하여 변수 라인에 변수 삽입

sed 또는 awk를 사용하여 변수 라인에 변수 삽입

두 개의 변수(txt와 줄 번호)가 있습니다. x 줄에 txt를 삽입하고 싶습니다.

card=$(shuf -n1 shuffle.txt)
i=$(shuf -i1-52 -n1)

"카드"는 내 txt입니다. 섞인 "덱"에서 무작위로 선택된 카드이며 이를 무작위 행에 삽입하고 싶습니다. (i)

답변1

txt추가하려는 텍스트가 할당되고 텍스트 i를 삽입하려는 줄 번호가 할당되면 원하는 결과가 출력됩니다.

$ awk -v line="$i" -v text="$txt" '{print} NR==line{print text}' /path/to/textfile

text추가하는 대신 지정된 줄 번호(이미 있는 텍스트에 추가)에 추가하도록 약간 수정합니다 .뒤쪽에위 코드에 표시된 대로 기존 행 i(자체):

$ awk -v line="$i" -v text="$txt" ' NR!=line{print} NR==line{print $0 text}' /path/to/textfile

답변2

파일을 데이터 구조로 사용하면 애플리케이션에 심각한 성능 저하가 발생하지만 다음과 같이 foo줄 번호에 변수 내용을 삽입 할 수 있습니다 .ifile.txt

printf '%s\n' "${i}i" "$foo" . x | ex file.txt

변수에 foo줄 바꿈이 포함된 경우 몇 가지 극단적인 경우가 있지만 변수에 유효한 줄 번호가 있는 한 i(즉, 의 줄 수보다 클 수 없음 file.txt) 특수 문자 등에 관계없이 작동합니다.

그러나 파일의 줄 번호를 데이터 구조로 사용하는 것은 매우 비효율적인 셔플 방법입니다. 그러니 조심해.

관련 정보