1

現在、次の形式のファイルがあります

location1 attr attr  ... attr
location2 attr attr  ... attr
...
locationn attr atrr  ... attr

私がやりたいことは、各行を調べて、場所 (最初のフィールド) を取得してから、属性を反復処理することです。これまでのところ、最初のフィールドを取得する方法はわかっていますが、属性を反復処理する方法はわかっていません。また、行ごとに異なる数の属性があります。

TEMP_LIST=$DIR/temp.list

while read LINE
do
        x=`echo $LINE | awk '{print $1}'`
        echo $x
done<$TEMP_LIST

属性を反復処理する方法を教えてもらえますか? のような効果を得たい

while read LINE
do
    location=`echo $LINES |awk '{print $1}'`
    for attribute in attributes
        do something involving the $location for the line and each individual $attribute
done<$TEMP_LIST

私は現在 ksh シェルで作業していますが、他の UNIX シェルでも問題ありません。翻訳方法を見つけます。時間を大幅に節約できるので、誰かが助けてくれたら本当に感謝しています。ありがとうございました。

4

3 に答える 3

0

これは他のシェルでも機能する可能性がありますが、Bash で機能するアプローチは次のとおりです。

#!/bin/bash

TEMP_LIST=temp.list

while read LINE
do

    # Split line into array using space as delimiter.
    IFS=' ' read -a array <<< $LINE

    # Use first element of array as location.
    location=${array[0]}
    echo "First param: $location"

    # Remove first element from array.
    unset array[0]

    # Loop through remaining array elements.
    for i in "${array[@]}"
    do
        echo "   Value: $i"
    done

done < $TEMP_LIST
于 2013-01-19T01:28:25.040 に答える