读取文件并将每行拆分为多个变量

时间:2017-02-28 18:07:17

标签: linux bash shell variables

我的文件里面有文字,如下:

class Program
{
    static void Main()
    {
        var baseAddress = new Uri("http://localhost:8080/ProtoBuf");

        using (var serviceHost = new ServiceHost(typeof(ProtoBufService), baseAddress))
        {
            var endpoint = new ServiceEndpoint(ContractDescription.GetContract(typeof(IProtoBufService)),
                new NetHttpBinding(),
                new EndpointAddress(baseAddress));

            endpoint.EndpointBehaviors.Add(new ProtoEndpointBehavior());
            serviceHost.AddServiceEndpoint(endpoint);

            serviceHost.Open();
            Console.ReadKey();
        }
    }
}

此数据与项目"名称"相关。并且它的颜色ID"
我需要从ID中拆分Name并将它们放在单独的变量中。

作为一个注释,当使用10以下的数字时,ID都可以有0或者前导0,所以我需要解析它们出现的那些(04需要保持04而1需要保持1而不是4或01)

名称中可以包含下划线(_),连字符( - )或空格(),这些也需要保留。

以下是我阅读文件的内容,该文件在循环中逐行读取文件,这很好,但我无法弄清楚如何正确地分离我想要的变量。

471_068 0
AALIAN  1
ASHLEY-U    95
CATRIONA_W  97
STESSY K    08

1 个答案:

答案 0 :(得分:3)

read可以自己做到这一点。请参阅BashFAQ #1

while IFS=$'\t' read -r key value; do
  echo "First Var is $key - Remaining Line Contents Are $value"
done

请注意,如果您要放弃第二列之后的任何内容(而不是将该内容附加到该值),则会改为:

while IFS=$'\t' read -r key value _; do
  echo "First Var is $key - Second Var is $value"
done

如果您希望以能够按名称查找ID的方式存储ID,则关联数组(在bash 4.0中添加)是正确的工具:

declare -A color_ids=( )
while IFS=$'\t' read -r key value; do
  color_ids[$key]=$value
done

for name in "${!color_ids[@]}"; do
  value=${color_ids[$name]}
  echo "Stored name $name with value $value"
done