スポンサーリンク

範囲指定して列を抽出

※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-

※MACターミナル(BSD系)での動作確認です。

例えば、下記のin.txtがあったとします。

 $ cat in.txt 
str11 str12 str13 str14 str15
str21 str22 str23 str24 str25
str31 str32 str33 str34 str35
str41 str42 str43 str44 str45
str51 str52 str53 str54 str55

下記がサンプルコードになります。

組み込み変数等でうまくできれば良かったのですが、
見つからず、下記のように少々テクニカルにやりました。
printfを使って工夫してみました。

参考:awkでよく使うprintfの書式のサンプルコード

2列目から4列目を抽出しています。

 $ cat sample.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		start = 2
		end = 4
	}
	{
		for(i = start; i <= end; i++){
			printf $i 
			#最終列以外はスペースを入れる
			if(i != end){
				printf " "
			}
		}
		print ""#改行をいれる
	}
'

下記が実行結果になります。
 $ ./sample.awk 
str12 str13 str14
str22 str23 str24
str32 str33 str34
str42 str43 str44
str52 str53 str54

スポンサーリンク

範囲指定して行を抽出

NR変数が使えますね。
参考:awkのNR変数で行数に応じた処理をする

参考:awkで対象レコード(行)を絞って、フィールド(列)の最大値を算出する

下記がサンプルコードになります。

 $ cat sample1.awk 
#!/bin/sh
cat in.txt | awk '		
	BEGIN{
		start = 2
		end =4
	}
	{
		if(start <=NR && NR <= end){
			print $0
		}	
	}
'

下記が実行結果になります。
 $ ./sample1.awk 
str21 str22 str23 str24 str25
str31 str32 str33 str34 str35
str41 str42 str43 str44 str45

スポンサーリンク