変数を使用してawk
個々の列を ,
。印刷したい列とパターンは他の変数に保存されますb
。パターンa
と印刷はb
次のとおりです。
a='15986327,415532694,850257614,875121642,20140819'
b='$1","$2","$4'
次の出力を取得しようとしています。
15986327,415532694,875121642
b
スイッチを使ってパターンをawkに渡そうとしていますが、内部で使用する-v
方法がわかりません。次のコマンドを試しましたが、これは私が得たい出力ではありません。print
awk
echo $a |awk -v ba="${b}" -F"," '{print ba}'
$1","$2","$4
echo $a |awk -v ba="${b}" -F"," '{print $ba}'
15986327,415532694,850257614,875121642,20140819
答え1
変数を使用する必要はありませんba
。以下を試してください。
$ echo $a | awk -F',' '{print '"$b"'}'
15986327,415532694,875121642
この方法は$b
ではなくシェルによって拡張されますawk
。残りのステートメントはawk
一重引用符で囲まれているため、影響を受けません。
答え2
awk
変数は、ほとんどの言語の変数と同様に、その値にのみ使用され、式として再解析されません。これで好きなことができます:
a='15986327,415532694,850257614,875121642,20140819'
echo $a | awk -F, -v OFS=, '{print $1, $2, $4}'
OFS
(出力にカンマが表示されるように設定してください)。b
変数として必要な場合は、次のものを使用できます。
b='$1, $2, $4'
echo $a | awk -F, -v OFS=, "{print $b}"
代わりにb
式の一部としてinを置き換えますawk
。
言ったように、awk
これは必要ありません。本当に仕事です。cut
:
echo "$a" | cut -d, -f1,2,4
,
コードを複雑に二重解析する必要なく、フィールド区切り文字として使用するフィールド1、2、4を選択します。これがcut
私たちが設計した目的です。