awkコマンドをスクリプトにまとめる方法は? (ファイルからの熱抽出/再配列)

awkコマンドをスクリプトにまとめる方法は? (ファイルからの熱抽出/再配列)

私は要約しようとしました:

$ awk -F":" '{ print $7 ":" $1 }' /etc/passwd

次のコマンドライン引数で指定された区切り文字、入力ファイル、および列の選択を使用してスクリプトに変換します。

#! /bin/bash
# parse command line arguments into variables `delimiter`, `cols` and `inputfile`
...    

awk -F"$delimiter" '{ print '"$cols"' }' "$inputfile"

入力はファイルから来るので、STDIN入力も機能します。私は列を順番に別々のパラメータとして指定することを好みます。出力区切り記号は、例のコマンドに示すように、入力区切り記号と同じです。

このようなスクリプトをどのように書きますか?

ベストアンサー1

あなたはそれを使用することができますバッシュgetopts(少し下にスクロールする必要があります。)コマンドライン解析を実行します。

#!/bin/bash
delimiter=:
first=1
second=2
while getopts d:f:s: FLAG; do
  case $FLAG in
    d) delimiter=$OPTARG;;
    f) first=$OPTARG;;
    s) second=$OPTARG;;
    *) echo error >&2; exit 2;;
  esac
done
shift $((OPTIND-1))
awk -F"$delimiter" -v "OFS=$delimiter" -v first="$first" -v second="$second" '{ print $first OFS $second }' "$@"

おすすめ記事