シェルスクリプトで特定の列を抽出する

Shell Script

こんにちは、連続投稿の山田ハヤオです。

シェルスクリプトで、区切られてる文字の列を指定して抽出する方法をまとめてみました。

【追記】もっと良い方法があったらコメントお願いします。

スポンサーリンク

列を抽出する

これからabc.txtという以下のファイルで考えます。

aa bb cc dd ee ff
gg hh ii jj kk ll
mm nn oo pp qq rr
ss tt uu vv ww xx

今回は3列目を取り出してみます。

awkを使う

今まではこれしか知りませんでした。

速度が遅くて悩んだのが今回調べるに至った動機だったりします。

awkなのでもっといろいろ細かい条件を設定できます。

cat ./abc.txt | awk '{print $3}'

cutを使う

さっき知った方法です。一番シンプルかも。

cat ./abc.txt | cut -d ' ' -f 3

while

1行ずつ取り出して配列に変換して取り出す方法です。正直めんどいし遅そう。

いかにも頭悪そうな方法だと思います。

while read line; do
    _line=(${line})
    echo "${_line[2]}"
done < ./abc.txt

余談

自分はいつもgetclmという関数を作成しています。

引数で列を指定し、テキストの内容は標準入力から受け取るというシンプルな関数です。

cat -を使うと標準入力から値を受け取れます。

function getclm() {
    echo "$(cat -)" | cut -d " " -f "${1}"
}

上の例の場合はこういうふうに使いましょう。

cat ./abc.txt | getclm 3

Alter Linuxのソースコードでいっぱい使ってます。

ALter Linuxのソースコード↓

GitHub - FascodeNet/alterlinux: Alter Linux - ArchLinux-derived OS made in Japan aimed at being usable by anyone
Alter Linux - ArchLinux-derived OS made in Japan aimed at being usable by anyone - FascodeNet/alterlinux

前回の猿でもわかるArch Linux↓

https://blog.fascode.net/2021/04/12/arch-linux/

コメント

タイトルとURLをコピーしました