awkフィールドから取得した値をトリムする

awkフィールドから取得した値をトリムする

ファイルを解析していて、awk を使用して最初のフィールドと 3 番目のフィールドを取得しています。

これはすべて問題ありません。ただし、最初のフィールドでは、その文字列から最後の 4 文字を削除したいと思います。これまでのところ、awk でこれを行う方法は見つかっていません。これを行う唯一の方法は、複数回の呼び出しを行って awk 出力を 2 つの変数に保存し、最初の文字列を削除することです。

もっと効率的な方法はありますか?ファイルは次のようになります

abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod

これはループで実行するものです

echo $output | awk -F, "{print $1, $3}"

これで行は正しく印刷されますが、$1をトリムして最後の4文字を削除します。

答え1

1 つの方法は、awk のsubstr関数を使用することです。たとえば、次の入力から始めます。

$ cat input
abcdefghi.234,12345,xyz
riosadsef.543,19432,eis
baifafsag.342,01934,eod

次のようにして、列 1 の最後の 4 文字を省略して、列 1 と 3 を印刷できます。

$ awk -F, '{print substr($1, 1, length($1)-4), $3}' input
abcdefghi xyz
riosadsef eis
baifafsag eod

関連情報