아래와 같이 사용자 입력 텍스트 파일에 패턴을 추가하는 코드가 있습니다.
echo -n "WHICH STATIONS?"
read station
awk -v input="$station" '
BEGIN {
n = split(tolower(input), user)
pattern= "force %-4s npos 0. .0001\n"
}
{print}
/<< write after this line >>/ {
for (i=1; i<=n; i++)
printf pattern, user[i]
exit
}
' ./data > data_2
사용자 입력을 가정하면 abcd ab12
명령이 다음 줄에 추가됩니다.
force abcd npos 0. .0001
force ab12 npos 0. .0001
아래와 같이 별도의 줄에 각 입력에 대해 문자열을 추가해야 합니다 epos
(위의 예와 동일한 입력에 대해).upos
force abcd npos 0. .0001
force abcd epos 0. .0001
force abcd upos 0. .0001
force ab12 npos 0. .0001
force ab12 epos 0. .0001
force ab12 upos 0. .0001
pattern
이 줄을 데이터 파일에 추가하는 옵션을 어떻게 수정합니까 ?
답변1
GNU awk 사용:
pattern = "force %1$-4s npos 0. .0001\n" \
"force %1$-4s epos 0. .0001\n" \
"force %1$-4s upos 0. .0001\n"
[...]
printf pattern, user[i]
printf(3)
GNU와 마찬가지로 libc
GNU에서도 다음을 의미합니다.%<n>$s
awk
N형식 다음의 첫 번째 매개변수입니다.
가지고 다닐 수 있는:
pattern = "force %-4s npos 0. .0001\n" \
"force %-4s epos 0. .0001\n" \
"force %-4s upos 0. .0001\n"
[...]
printf pattern, j=user[i], j, j
답변2
"Xpos" 목록의 동적 지정을 허용하는 또 다른 방법
echo -n "WHICH STATIONS?"
read station
awk -v input="$station" -v 'xpos=npos epos upos' '
BEGIN {
n = split(tolower(input), user)
m = split( xpos, Pos)
pattern= "force %-4s %s 0. .0001\n"
}
1
/<< write after this line >>/ {
for (i=1; i<=n; i++)
for (j=1;j<=m;j++)
printf pattern, user[i],Pos[j]
exit
}
' ./data > data_2