
注:テキストにタブ文字を挿入する方法がわからず、[tab]に置き換えました。
表で区切られたファイル名の値のリストがあります。
host1[tab]ip1
host2[tab]ip2
host3[tab]ip3
host4[tab]ip4
デフォルトの区切り記号cut
は[tab]です。
cut -f1 < file
cut -f2 < file
予想通り、ホストとIPを取得しました。しかし、私のスクリプトでは動作しません。
while read line
do
machine=$(echo $line | cut -f1)
ip=$(echo $line | cut -f2)
echo "$machine : is my hostname & $ip : is my @IP"
done < file
実際、行全体を$line
変数に入れます。私も大きな成功を収めずに努力しました。
machine=$(echo $line | cut -d$'\t' -f1)
ip=$(echo $line | cut -d$'\t' -f1)
ただし、テーブルをファイルの空白に置き換えてコードを変更すると、次のようになります。
machine=$(echo $line | cut -d' ' -f1)
ip=$(echo $line | cut -d' ' -f1)
期待どおりに動作します。
最初の結果がスクリプト外のCLIで機能するのに、なぜ予想と異なるのか疑問に思います。
私のLinuxバージョン:
Linux yolo 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
読んでお手伝いいただきありがとうございます。
答え1
cut
この場合、ホスト名とアドレスを削除して直接読み取ることができます。
#!/bin/sh
while read -r machine ip
do
printf '%s : is my hostname & %s : is my @IP\n' "$machine" "$ip"
done < file
exit 0