配列を通るループ

配列を通るループ

list.txt(INPUT)の私の記録は次のとおりです。

List of animals SET 1=Dog 2=Crow 3=Snake Pet,bird,reptile
List of Countries SET 1=France 2=Singapore 3=Columbia Europe,Asia,SouthAmerica
List of Parts SET 1=KeyBoard 2=Speaker 3=LEDpanel Computer,AudioPlayer,Television
List of Cities SET 1=Amsterdam 2=KualLumpur 3=Paris Netherlands,Malaysia,France

たとえば、各行の最後の列を配列として使用して数字1,2,3を置き換えようとします。Pet,bird,reptile最初の行を使用してPet=Dog bird=Crow合計を計算しますreptile=Snake

したがって、出力ファイルは次のようになります。

List of animals SET Pet=Dog bird=Crow reptile=Snake
List of Countries SET Europe=France Asia=Singapore SouthAmerica=Columbia
List of Parts SET Computer=KeyBoard AudioPlayer=Speaker Television=LEDpanel
List of Cities SET Netherlands=Amsterdam Malaysia=KualLumpur France=Paris

を使用すると、awk最後の列を配列文字列に分割できます。しかし、1、2、3を同じ数字に置き換えることはできません。

答え1

a構文を使用してawk配列の項目を繰り返すことができますfor (i in a)。たとえば、次の操作を実行できます。

awk '{split($NF,a,","); $NF=""; for (i in a) sub(i"=",a[i]"=",$0); print}' list.txt

答え2

常に3つの項目()があり、行x=yにスペースがない場合は、次のawkステートメントが機能します。

awk -F',| |=' '{printf "%s %s %s %s %s=%s %s=%s %s=%s\n", \
$1, $2, $3, $4, $11, $6, $12, $8, $13, $10}' list.txt

説明する:

  • -F',| |=':フィールド区切り記号,、スペース、および=
  • '{printf ...必要な形式で値を印刷します。
  • list.txt入力ファイル

答え3

このスクリプトは、連続するプロジェクトの数に関係なく機能する必要があります。

while read line do valType=($(echo $line | awk '{ print $NF }' | tr ',' ' ')) vals=($(echo $line | awk '{ $NF="";$1="";$2="";$3="";$4=""; print $0 }' | tr [1234567890] ' ' | tr '=' ' ' )) echo $line | awk '{print $1" "$2" "$3" "$4 }' | tr -d '\n' numVals=${#vals[@]} for i in $(seq 0 $((numVals-1))) do echo -n " "${valType[$i]}"="${vals[$i]} done echo " " done < list.txt

説明する:

valTypeコンマで区切られた要素を含む配列。

vals数字と等号が削除された行の4番目の位置と最後の位置の間の関連値を含みます。

配列内の値の数を繰り返し、両方の配列で一致する値を参照できます。

答え4

set '.\(=.[^ ]*\) ' '\([^,]*\),'
sed "s/\$/,/;s/$1$1$1$2$2$2/\4\1 \5\2 \6\3/
" <<\DATA
List of animals SET 1=Dog 2=Crow 3=Snake Pet,bird,reptile
List of Countries SET 1=France 2=Singapore 3=Columbia Europe,Asia,SouthAmerica
List of Parts SET 1=KeyBoard 2=Speaker 3=LEDpanel Computer,AudioPlayer,Television
List of Cities SET 1=Amsterdam 2=KualLumpur 3=Paris Netherlands,Malaysia,France
DATA

シェル配列を使用して配列を設定します。

出力

List of animals SET Pet=Dog bird=Crow reptile=Snake
List of Countries SET Europe=France Asia=Singapore SouthAmerica=Columbia
List of Parts SET Computer=KeyBoard AudioPlayer=Speaker Television=LEDpanel
List of Cities SET Netherlands=Amsterdam Malaysia=KualLumpur France=Paris

関連情報