그래서 저는 awk를 여러 번 사용하여 텍스트 파일의 각 줄에 텍스트를 추가하거나 제거했습니다. 이제 여러 위치의 각 줄에 일부 문자를 추가하는 방법을 배우고 싶습니다.
이것은 내 라텍스 데이터시트입니다. 예를 들어 다음과 같은 파일이 있을 수 있습니다.
mass merror velocity verror
1.0 0.1 2.0 0.2
1.5 0.2 1.0 0.2
2.0 0.3 0.5 0.1
이제 라텍스에서 테이블로 표시하려면 열 사이에 "&"를 추가해야 합니다. +/- 기호로 구분된 오류 값이 있는 두 개의 열이기를 원합니다. 또한 각 값은 수학 모드에 있어야 합니다. 라텍스에 대해 모르더라도 걱정하지 마세요. 내가 원하는 출력 코드는 다음과 같습니다.
\(mass \pm \merror\) & \(velocity \pm verror\) \\
\(1.0 \pm 0.1\) & \(2.0 \pm 0.2\) \\
\(1.5 \pm 0.2\) & \(1.0 \pm 0.2\) \\
\(2.0 \pm 0.3\) & \(0.5 \pm 0.1\) \\
그래서 데이터의 첫 번째와 세 번째 열 앞에 "("를 추가하고, 데이터의 두 번째와 네 번째 열 앞에 "\pm"을 추가하고, 두 번째와 네 번째 열의 끝에 ")"를 추가하고 싶습니다. 끝에 \를 추가하는 방법은 이미 알고 있습니다.
답변1
awk '{print "\\("$1" \\pm "$2"\\) & \\("$3" \\pm "$4"\\) \\\\"}'
답변2
awk
댓글을 작성하는 방식은 완벽해야 합니다. Perl에서 동일한 작업을 수행하는 방법은 다음과 같습니다.
perl -lane 'print "\\($F[0] \\pm \\$F[1]) & \\(\\$F[2] \\pm \\$F[3]) \\\\"' file
답변3
#!/bin/bash
read -r -d '' content <<EOF
mass merror velocity verror
1.0 0.1 2.0 0.2
1.5 0.2 1.0 0.2
2.0 0.3 0.5 0.1
EOF
awk -v out='\\(%s \\pm \\%s\\) & \\(%s \\pm %s\\) \\\\\n' \
'{printf out, $1, $2, $3, $4}' <<<"$content"
산출:
\(mass \pm \merror\) & \(velocity \pm verror\) \\
\(1.0 \pm \0.1\) & \(2.0 \pm 0.2\) \\
\(1.5 \pm \0.2\) & \(1.0 \pm 0.2\) \\
\(2.0 \pm \0.3\) & \(0.5 \pm 0.1\) \\
제공된 답변은 좋지만 개인적으로 printf 솔루션이 작업하기 더 쉽다고 생각합니다.