
ファイルを解析していて、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