【问题标题】:How to select an element from a 2d array in a file in Linux shell如何从 Linux shell 文件中的二维数组中选择一个元素
【发布时间】:2014-01-15 10:23:06
【问题描述】:

我是 shell 脚本的新手,我需要从包含二维数组的文件中读取。假设有一个名为 test.dat 的文件,其中包含以下值:

- Paris         London     Lisbon
- Manchester    Nurnberg   Istanbul
- Stockholm     Kopenhag   Berlin

在 linux bash 脚本中从该表中选择元素的最简单方法是什么?例如,用户输入 -r 2 -c 2 test.dat 表示选择 row[2] 和 column[2] 处的元素(纽伦堡)。

我已经看到了读取命令并在 Google 上搜索过,但大多数示例都是关于一维数组的。

This 似曾相识,但不能完全理解。

【问题讨论】:

    标签: arrays linux bash shell


    【解决方案1】:

    awk 非常适合:

    $ awk 'NR==row{print $col}' row=2 col=2 file
    Nurnberg
    
    • NR==row{} 表示:在记录号row 上,做{} 记录号通常是行数。
    • {print $col} 表示:打印字段编号col
    • row=2 col=2 将两个参数都提供给 awk

    更新

    还有一个小问题:如何将其转换为 sh 文件 当我在提示符中输入 -r 2 -c 2 test.dat 时,我可以运行 脚本,以便它从文件中读取并回显输出? – iso_9001_。

    例如:

    #!/bin/bash
    
    file=$1
    row=$2
    col=$3
    
    awk 'NR==row{print $col}' row=$row col=$col $file
    

    然后你执行如下:

    ./script a 3 2
    Kopenhag
    

    【讨论】:

    • 太棒了!我怀疑awt会起作用:)非常感谢
    • awk 对这类事情太强大了 :) 很高兴它对你有用!
    • 还有一个小问题:如何将其转换为 sh 文件,以便当我在提示符中输入 -r 2 -c 2 test.dat 时,我可以运行脚本,以便它从文件中读取并回显输出?
    • 你的速度真的很快,而且很有帮助:) 非常感谢
    • 今天,我已经成功地按照您的建议编写了代码。所以,再次感谢。我现在缺少的是,我可以设法以./tablooku.sh tablom.dat 2 2 运行代码,但是当我尝试将“2 2”部分参数化为./tablooku.sh tablom.dat -r 2 -c 2 时,我收到错误消息,上面写着“错误:-rth 行和-cth 列确实不存在”。如何参数化命令?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    相关资源
    最近更新 更多