Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在GNU Bash 4.2.46(2)中捕获列的单个单元格_Bash - Fatal编程技术网

在GNU Bash 4.2.46(2)中捕获列的单个单元格

在GNU Bash 4.2.46(2)中捕获列的单个单元格,bash,Bash,我正在尝试使用Bash脚本捕获多行多列文件的单个单元格。我需要用纯Bash来做这个。我的任务不允许我使用tcl、awk、sed、perl、python等。这是一个更大的函数的一部分——唯一的问题是这一行代码 我在GNU Bash 4.4.191上编写并测试了下面的脚本,它运行正常!问题是学校服务器使用的是GNU Bash 4.2.462,而学校服务器将对此进行评分。该脚本在学校服务器上不起作用 它输出名为table的文件第1行第1列中的单元格。每列都用制表符分隔。每一行都是用换行符创建的 cat

我正在尝试使用Bash脚本捕获多行多列文件的单个单元格。我需要用纯Bash来做这个。我的任务不允许我使用tcl、awk、sed、perl、python等。这是一个更大的函数的一部分——唯一的问题是这一行代码

我在GNU Bash 4.4.191上编写并测试了下面的脚本,它运行正常!问题是学校服务器使用的是GNU Bash 4.2.462,而学校服务器将对此进行评分。该脚本在学校服务器上不起作用

它输出名为table的文件第1行第1列中的单元格。每列都用制表符分隔。每一行都是用换行符创建的

cat table | cut -f 1 -d$'\n' | cut -f 1 > outputFile

上述代码在Bash 4.2.462上不起作用。它将输出第一列。但不是我要找的单个单元格。

根据我对这篇文章的评论和建议以及反复尝试,我选择使用以下格式,允许我使用head命令选择行,使用tail命令获取一个列表,然后使用cut命令选择列号:

cat table | head -n 1 | tail -n 1 | cut -f1 > outputFile
我选择使用cut,以防需要其他列。我需要这个循环

我也被纠正了。解决方案不是纯粹的bash。我的任务允许猫、头、尾和割。但其他语言如sed、awk等是不允许的


谢谢大家的意见。对于初学者来说,这是一次非常有启发性的经历。

您不是在使用纯Bash,而是在调用外部程序,如cat、tail和head。 在你的文章中没有描述这些和sed或awk之间的区别

我希望您真正了解您的需求,因为您当前的解决方案不符合Bash的要求

这将是纯Bash中的一个解决方案:

read line < table; [[ $line =~ ^[^$'\t']* ]];  printf "${BASH_REMATCH[0]}" > outputFile
此外,Bash的版本与tail或cat的工作方式无关,因为它们是独立的程序,就像Bash本身一样。
问题可能是学校服务器的大部分内容都有较旧的版本。

我认为bash版本不会有什么不同,因为您没有使用任何新的shell功能。cut-f 1-d$'\n'很奇怪。如果您只想使用第一行,请使用head-1。由于某些原因,bash版本确实起到了作用。我将相同的代码从一个复制粘贴到另一个,我得到了上面的结果。可能是cut的版本很重要,或者输入可能不同。但是bash版本应该不相关。你可以使用cat和cut,但不能使用awk?我认为纯bash只意味着内置,没有任何类型的外部程序。你可以摆脱猫和尾巴:head-1 table | cut-f1。