如何在 UNIX 上使用一些脚本将缺失的字符添加到文件中的一行文本?
How to add missing characters to a line of text in a file using some scripting on UNIX?
我制作了一个从文件中读取数据并将其插入到 table 中的程序。
每一行都有变量,每两个变量之间有一个逗号。每一行都是 table 的不同行。我想制作一个 unix 脚本,它将打开包含 100 行的文件并读取每一行并计算脚本将找到的 ,
。之后,我希望它编辑每一行并用 ,
填充该行,直到它们的数量为 50。
例如我需要每行有 50 个逗号 (,
)。如果我读了一行并且它有 30 个 ,
,我想在这一行中添加额外的 20 个逗号。
(第 1 行)
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1
(第 2 行)
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1
这是文件的格式。每行都会这样。
解释:
程序需要读取 50 个变量。所以它期望 49 ,
。当文件像上面一样并且变量较少时,我会遇到错误。所以我需要一个 unix 脚本来添加缺失的 ,
,以便将它们作为 null
。
您可以使用以下 awk 代码:
awk -F"," 'NF < 50 {printf [=10=]; for(i = NF; i < 50; ++i) printf ","; printf "\n" }' file
产生
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1,,,,,,,,,,,,,,,,,,,,
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1,,,,,,,,,,,,,,,,,,,,
这里,NF
是每行的字段数,F
是字段分隔符。 sasys 的规则是,如果您的字段少于 50 个(49 个逗号),我们会将缺少的字段添加到末尾。
我使用了相同的方法,但我注意到它在末尾产生了一个额外的逗号,所以我调整了原件以在末尾不添加逗号:
awk -F, 'NF <= 50 {printf [=10=]; for(i = NF; i < 50; ++i) printf ","; printf "\n" }'
我制作了一个从文件中读取数据并将其插入到 table 中的程序。
每一行都有变量,每两个变量之间有一个逗号。每一行都是 table 的不同行。我想制作一个 unix 脚本,它将打开包含 100 行的文件并读取每一行并计算脚本将找到的 ,
。之后,我希望它编辑每一行并用 ,
填充该行,直到它们的数量为 50。
例如我需要每行有 50 个逗号 (,
)。如果我读了一行并且它有 30 个 ,
,我想在这一行中添加额外的 20 个逗号。
(第 1 行)
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1
(第 2 行)
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1
这是文件的格式。每行都会这样。
解释:
程序需要读取 50 个变量。所以它期望 49 ,
。当文件像上面一样并且变量较少时,我会遇到错误。所以我需要一个 unix 脚本来添加缺失的 ,
,以便将它们作为 null
。
您可以使用以下 awk 代码:
awk -F"," 'NF < 50 {printf [=10=]; for(i = NF; i < 50; ++i) printf ","; printf "\n" }' file
产生
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1,,,,,,,,,,,,,,,,,,,,
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1,,,,,,,,,,,,,,,,,,,,
这里,NF
是每行的字段数,F
是字段分隔符。 sasys 的规则是,如果您的字段少于 50 个(49 个逗号),我们会将缺少的字段添加到末尾。
我使用了相同的方法,但我注意到它在末尾产生了一个额外的逗号,所以我调整了原件以在末尾不添加逗号:
awk -F, 'NF <= 50 {printf [=10=]; for(i = NF; i < 50; ++i) printf ","; printf "\n" }'