私のファイルには、次の構造があります:-
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
説明:
awk
awk
:ツールを呼び出すBEGIN{...}
: ファイルからの行の読み取りを開始する前に行うことFS="|"
:FS
フィールド セパレーターの略です。ファイルの各行をフィールドに区切る区切り文字と考えてくださいOFS="| "
: OFS
Output Field Separator の略です。上記と同じ考え方ですが、出力用です。FS =/= OFS この場合、フォーマットのため{print $1 OFS $2+$3}
:awk
読み取る行ごとに、最初のフィールド (文字) を出力し、続いて で指定された区切り文字を出力しOFS
、次にフィールド 2 とフィールド 3 の合計を出力します。input_filename
: awk は、ここで入力ファイル名を引数として受け入れます。