awkのスペースで区切られた出力を解析できません。

awkのスペースで区切られた出力を解析できません。

正しく理解した場合、出力のデフォルトの区切り記号は次awkのとおりです。スペース

ただし、次のスクリプトは期待どおりに機能しません。次の出力をawk配列に解析できません。

#!/bin/bash
echo "------ with input string from awk ------"
ALL_TTY_OWNERS_STR=$(ls -l /dev | grep tty | awk '{print $3}')

read -r -a ALL_TTY_OWNERS_ARRAY <<< "$ALL_TTY_OWNERS_STR"

echo "${#ALL_TTY_OWNERS_ARRAY[@]}" # This says 1
echo "${ALL_TTY_OWNERS_ARRAY[0]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[1]}" # empty string, expected "root"
echo "${ALL_TTY_OWNERS_ARRAY[2]}" # empty string, expected "root"


echo "------ with my manually created input string ------"
ALL_TTY_OWNERS_STR="root root root" # only for testing

read -r -a ALL_TTY_OWNERS_ARRAY <<< "$ALL_TTY_OWNERS_STR"

echo "${#ALL_TTY_OWNERS_ARRAY[@]}" # 3, as expected
echo "${ALL_TTY_OWNERS_ARRAY[0]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[1]}" # "root", as expected
echo "${ALL_TTY_OWNERS_ARRAY[2]}" # "root", as expected

withの出力を期待どおりに解析できないのはなぜですかawkread

ベストアンサー1

それについて大地スプリッタ。

あなたは定義する必要があります記録区切り文字は、各文字列を単一の文字列に入れます。使用ORSパラメータ:

ls -l /dev | grep tty | awk 'BEGIN { ORS=" " }; {print $3}'

それがなければ、出力は次のようになります。

root
root
root
etc...

ALL_TTY_OWNERS_STR変数を定義するときただ最初に入れてください。配列の最初の要素の出力文字列です。したがって、あなたの配列には1つの要素しか含まれません。これはまさにあなたが得るものです。

おすすめ記事