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