bash - Bash 函数:变成一个二维数组,删除一个索引标识的行和列
问题描述
我正在尝试创建一个 bash 函数(基本上,放入我的 bashrc 中)。
目标是删除由数字(整数)索引的行和列,该数字是 bash 函数 ( $2
) 的第二个参数,第一个参数是文件名 ( $1
)。
我试过了,但我无法让它工作(我在 MacOS Mojave 下):
function remove_line_column() { gsed '"$2"d' $1 | awk -v ind_field=$2 '!(ind_field="")' ;}
我在expanding Shell arguments
(like "$2"
) 和Shell arguments
(like only $2
) 之间做混淆。
在直接命令行中,我可以通过执行以下操作获得想要的结果(删除第 8 行和第 8 列):
awk 'NR == 8 {next} {print}' file.txt | awk '!($8="")'
如何将其实现为 Bash 函数?
我想像这样从终端调用它:
$remove_line_column file.txt 8`
解决方案
remove_line_column() {
awk -v remove="$2" 'NR == remove {next} {$remove = ""; print}' <"$1"
}
...用于:
$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9'
1 2 3
4 5 6
7 8 9
$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9' | remove_line_column /dev/stdin 2
1 3
7 9
$ printf '%s\n' '1 2 3' '4 5 6' '7 8 9' | remove_line_column /dev/stdin 3
1 2
4 5
推荐阅读
- file - 是否可以使用针对具有重复内容的多个文件进行优化的压缩器/数据结构?
- node.js - 在 React 17.0.1 中存储数组对象的最佳方法是什么
- matlab - 在MATLAB中绘制矩形窗函数(u[n]-u[n-5])的方法
- git - Git:从另一个功能分支接受拉取请求
- javascript - 使用 .setSelfDeaf() 时如何修复此 ReferenceError?
- python - 序列化程序 Django
- assembly - Rx 和 [Rx] 之间的区别
- csv - 如何在读取 pyspark 数据框中的 csv 文件时读取选定的列?
- c# - 从另一个类调用方法:“对象引用未设置为对象的实例。”
- azure - 如何在 azure devops 中将 docker 映像发布为工件