행이 {조건}으로 시작하면 187번째 문자 뒤에 변수가 삽입됩니다.

행이 {조건}으로 시작하면 187번째 문자 뒤에 변수가 삽입됩니다.

10,000줄이 넘는 .txt 파일이 있습니다. 일부 줄은 1,POS,MGC=또는 로 시작합니다 1,NEG,MGC=. 이 줄의 경우 뒤에 오는 텍스트를 유지하면서 줄의 187번째 문자 뒤에 변수를 삽입하고 싶습니다.

내가 지금까지 가지고 있는 것은

awk 'BEGIN{FS=OFS=""}
{if (substr($0,1,10)~"1,...,MGC=")
$187=$variable} inputfile > outputfile

이것은 전혀 작동하지 않습니다.

답변1

사용 sed:

sed "/^1,\(POS\|NEG\),MGC=/ s/./\0$variable/187" file

.임의의 문자와 일치하는 숫자 플래그는 187번째 발생을 대체합니다 187. s/.../.../전체적으로 이는 187번째 문자가 자체적으로 대체되고 그 뒤에 값이 옵니다 $variable.

줄 간격은 /pattern/이 작업을 "1,POS,MGC=" 또는 "1,NEG,MGC="로 시작하는 줄로 제한합니다.

답변2

펄 사용:

perl -i.bak -spe 's/^(?=1,(POS|NEG),MGC=).{187}\K/$new/' -- -new="$text" file

시험

line=$(seq 63 | paste -sd,)
lines=( "$line" "1,POS,MGC=$line" "1,NEG,MGC=$line" "1,foo,MGC=$line" )
printf "%s\n" "${lines[@]}" | perl -spe 's/^(?=1,(?:POS|NEG),MGC=).{187}\K/$new/' -- -new="HELLO!"
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63
1,POS,MGC=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,HELLO!63
1,NEG,MGC=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,HELLO!63
1,foo,MGC=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63

답변3

노력하다

awk -vINSVAR="$variable" '/1,(POS|NEG),MGC/ {$0 = substr ($0, 1, 187) INSVAR substr ($0, 188)} 1' file

관련 정보