私のファイルには、次の構造があります:-
A | 12 | 10
B | 90 | 112
C | 54 | 34
私がしなければならないことは、列 2 と列 3 を追加し、列 1 で結果を出力することです。
出力:-
A | 22
B | 202
C | 88
2 つの列を取得しましたが、追加する方法がわかりません
cut -d ' | ' -f3,5 myfile.txt
。
Bash ソリューション:
#!/bin/bash
while IFS="|" read f1 f2 f3
do
echo $f1 "|" $((f2+f3))
done < file
これは、awk を使用して簡単に行うことができます。
awk '{print $1," | ",($3+$5)'} myfile.txt
おそらく動作します。
あなたはこれを行うことができますawk:
awk 'BEGIN{FS="|"; OFS="| "} {print $1 OFS $2+$3}' input_filename
入力:
A | 12 | 10
B | 90 | 112
C | 54 | 34
出力:
A | 22
B | 202
C | 88
説明:
awkawk:ツールを呼び出すBEGIN{...}: ファイルからの行の読み取りを開始する前に行うことFS="|":FSフィールド セパレーターの略です。ファイルの各行をフィールドに区切る区切り文字と考えてくださいOFS="| ": OFSOutput Field Separator の略です。上記と同じ考え方ですが、出力用です。FS =/= OFS この場合、フォーマットのため{print $1 OFS $2+$3}:awk読み取る行ごとに、最初のフィールド (文字) を出力し、続いて で指定された区切り文字を出力しOFS、次にフィールド 2 とフィールド 3 の合計を出力します。input_filename: awk は、ここで入力ファイル名を引数として受け入れます。