だから私は何度も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
ラテックスでテーブルとして表示するには、列の間に「&」を追加する必要があります。 +/- 記号で区切られたエラー値を持つ 2 つの列にしたい。また、各値は数学モードにする必要があります。ラテックスについて知らなくても心配しないでください。私が望む出力コードは次のとおりです。
\(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\) \\
だから、データの最初と3番目の列の前に「(」を追加し、データの2番目と4番目の列の前に「\ pm」を追加し、2番目と4番目の列の最後に「)」を追加したいと思います。最後に\を追加する方法はすでにわかっています。
答え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ソリューションが作業しやすくなると思います。