質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

3回答

5787閲覧

awkで行番号に変数を使用する

退会済みユーザー

退会済みユーザー

総合スコア0

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2018/10/16 08:57

(aaa.txt)
aaa 2
bbb 3
ccc 4
ddd 5
eee 6

このようなテキストファイルで3行目未満を切り取って別ファイルに出力したいと考えています。
シェルスクリプトのawkコマンドを使って

LINE=3
LINE=expr ${LINE}
cat aaa.txt | awk 'NR <= /'"${LINE}"'/' > bbb.txt

というコマンドを書いているのですが、${LINE}を文字列としてとられてしまいます。
つまり、
(得たいファイル)3行目未満を出力
aaa 2
bbb 3

(実際に出力されるファイル)3という文字がある行未満を出力
aaa 2

となってしまいます。
LINEの値は別ファイルから引っ張ってくるので、どうしても変数にしなければなりません。
${LINE}を数字として認識するためにはどうすればよいのでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

cat aaa.txt | awk 'NR <= /'"${LINE}"'/' > bbb.txt
/がおかしいです。/は正規表現リテラルを書く記号です。
cat aaa.txt | awk 'NR <= '"${LINE}" > bbb.txt
であれば、問題ないかと。ただし、LINE=3なので、「3行目未満」なら=を取って、
cat aaa.txt | awk 'NR < '"${LINE}" > bbb.txt
ですね。

あと、

Bash

1LINE=`expr ${LINE}`

も意味不明です。これだとなにもしないのと同じです。もしかして、

Bash

1LINE=`expr ${LINE} - 1`

と引き算するつもりで書き間違えたのでしょうか?

投稿2018/10/16 13:15

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/17 00:52

回答ありがとうございます。 参考に書き換えてみます。
guest

0

head コマンドで書いてみました。
a.sh

bash

1#!/bin/bash 2LINE=3 3head -n $((${LINE} - 1)) aaa.txt

実行例
イメージ説明

投稿2018/10/16 11:59

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/17 00:53

こういう書き方もあるのですね! 回答ありがとうございます。
guest

0

ベストアンサー

cat aaa.txt | awk -v l=$LINE 'NR<l'

投稿2018/10/16 09:06

KojiDoi

総合スコア13671

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/16 09:46

解決しました! 早い回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問