(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Bashシェルスクリプト】テキストの特定行を一行ずつ処理する

スポンサーリンク

やりたいこと

テキストの任意の行を一行ずつ処理する。

一例として、5行のファイルから3行目を表示し、1行目を表示し、4行目を表示する。

コマンド実行環境
  • Debian GNU/Linux 9 (stretch)

サンプルファイルの準備

サンプルとして以下ファイルtest.txtを用意しました。5行分のファイルです。

a
b
c
d
e

やり方

以下スクリプトで実現可能です。in の後ろの部分の数字を任意に変えれば処理箇所の変更も可能です。

#!/bin/bash
for i in 3 1 4
do
 x=`cat test.txt | head -n $i | tail -n 1`
 echo $x
done

今回はechoで表示しているだけですが、行全体が$xに格納されているので追加で処理も可能です。

実行例

c
a
d

以下、補足です。

補足

やり方は単純で行全体から先頭$i行目までを取得し、その末尾1行目を抜き出すので結果的に先頭から$i行目を取得できます。

全行を頭から順に処理するのであれば以下でシンプルに実現できますが

#!/bin/bash
while read line
do
 echo $line
done < ./test.txt

ピンポイントな行に対して処理を行うのであれば

#!/bin/bash
for i in 1 2 3
do
 x=`cat test.txt | head -n $i | tail -n 1`
 echo $x
done

といった記載は有用です。

以上、ご参考になれば幸いです。