12

bash の特定の行からファイルを 1 行ずつ読み込もうとしています。while コマンドを使用して、カウントをインクリメントしてファイルの各行を読み取っています。特定の行から開始することはできますか?

let count=0
declare -a ARRAY

while read LINE; do
ARRAY[$count]=$LINE 
vech=${ARRAY[$count]}
    if [...blah ..]
     then
    ...blah..
    fi 
sleep 2 
((count++)) 
done < filec.c 

提案やアルゴリズムの形でのあらゆる種類のヘルプを歓迎します。

編集: 行番号を variable として渡そうとしています。私は特定のパターンを探しています。見つかった場合は、パターンから始まる行番号を渡す必要があります。

4

5 に答える 5

16

sedアドレスを使用して、特定の行番号から開始し、ファイルの最後まで出力します。

lineNumber=10
sed -n "$lineNumber"',$p' |
while read line; do
  # do stuff
done

それか、Fredrikが提案したように、次を使用しますawk

lineNumber=10
awk "NR > $lineNumber" |
while read line; do
  # do stuff
done
于 2012-06-19T15:22:46.457 に答える
7

このようなものはどうですか?

while read -r line
do
    echo "$line"
done < <(tail -n +number file.name)

POSIXとの互換性はありませんが、Bashを試してみてください。もちろん、whileループ内の$lineでやりたいことをしてください。
PS:必要な数直線で番号を変更し、ファイル名でfile.nameを変更します。

于 2012-06-19T14:34:34.353 に答える
2

多くの方法のいくつか:http://mywiki.wooledge.org/BashFAQ/011

個人的に:

printf '%s\n' {1..6} | { mapfile -ts 3 x; declare -p x; }                  

また、すべて大文字の変数名は使用しないでください。

于 2012-06-19T13:58:56.107 に答える
2

カウンターを置いてください。特定の行の後のすべての行を印刷するには、次のようにします。

#!/bin/bash

cnt=0
while read LINE
do
    if [ "$cnt" -gt 5 ];
    then
        echo $LINE
    fi
    cnt=$((cnt+1))
done < lines.txt

または、awk を使用しない理由:

awk 'NR>5' lines.txt 
于 2012-06-19T14:11:12.437 に答える
0

必要な数まで特定の行数を読み取り、ロジックを開始して残りを読み取るだけです。

「テキスト」ファイルを節約する方法はありません。実際に読まずに行をスキップすることはできません。行は 0x0a で区切られ、可変長です。したがって、特定の「行番号」に到達するには、各区切り文字をスキャンしてカウントする必要があります。読んでいないと思わせるギミックがありますが、読んでいました。

于 2012-06-19T20:21:44.147 に答える