unix - 使用可变输入位置从 awk 调用函数
问题描述
我有一堆不同的文件。我们使用了“|” 作为分隔符 所有文件都包含标题为 CARDNO 的列,但不一定在所有文件的同一位置。我有一个名为 data_mask 的函数。我想在所有文件中申请 CARDNO 以将它们更改为 NEWCARDNO。
我知道,如果我传入 CARDNO 的列号,我可以很简单地做到这一点,比如它是 5 列文件中的第 3 列,例如:
awk -v column=$COLNUMBER '{print $1, $2, FUNCTION($column), $4, $5}' FILE
但是,如果我所有的文件都有数百列,并且在每个文件中都是任意的,那么这将非常乏味。我正在寻找一种方法来做一些事情:
awk -v column=$COLNUMBER '{print #All columns before $column, FUNCTION($column), #All columns after $column}' FILE
我的函数将字符串作为输入并将其更改为新字符串。它将列的值作为输入,而不是列号。请建议我 Unix 命令,它可以将列值传递给函数并给出所需的输出。提前致谢
解决方案
如果我正确理解您的问题,文件的第一行是标题,其中一个列名为CARDNO
. 如果是这种情况,那么您只需在该文件中搜索标题并进行相应处理。
awk 'BEGIN{FS=OFS="|";c=1}
(NR==1){while($c != "CARDNO" && c<=NF) c++
if(c>NF) exit
$c="NEWCARDNO" }
(NR!=1){$c=FUNCTION($c)}
{print}' <file>
根据评论,如果文件中没有标题,但您知道每个文件,它是哪个列号,那么您可以简单地执行以下操作:
awk -v c=$column 'BEGIN{FS=OFS="|"}{$c=FUNCTION($c)}1' <file>
推荐阅读
- javascript - 如何使用 JavaScript 在我的数据中检测字符串数组和对象数组?
- python - IronPython 在沙箱中运行时“未定义名称'locals'”,但在我直接运行脚本时没有
- visual-studio-code - Visual Studio Code 窗口未出现
- c - 带有malloc的二维数组,函数调用分配
- javascript - 如何将查询到的 JSON 添加到页面?
- c# - 无法向我的第二个表单添加任何内容 [C#-MetroFrameWorkUI]
- graphviz - 是否可以在graphviz的边缘中间放置标签?
- css - 输入组边框在中间加倍
- android - Google Maps GeoJSON Utility 可以使用通过 geojson.io 设置的属性吗?
- reactjs - React.js,在 DOM 中迭代的正确方法