Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/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
Awk printf用于修复日期斜杠_Awk - Fatal编程技术网

Awk printf用于修复日期斜杠

Awk printf用于修复日期斜杠,awk,Awk,如何从awk命令的输入文件中的$1字段中删除“/”?我将打印此字段作为最后一个字段。这是我的输入文件 05/14/2021,63,131629,508138,JOSHUA KATENBRINK,85.91,CHECK,775,90131629 05/14/2021,63,107001,504026,JOHN JONES,54.62,CHECK,1354,90107001 05/14/2021,63,105071,502632,STEPHANIE WATSON,64.00,CHECK,2210,9

如何从awk命令的输入文件中的$1字段中删除“/”?我将打印此字段作为最后一个字段。这是我的输入文件

05/14/2021,63,131629,508138,JOSHUA KATENBRINK,85.91,CHECK,775,90131629
05/14/2021,63,107001,504026,JOHN JONES,54.62,CHECK,1354,90107001
05/14/2021,63,105071,502632,STEPHANIE WATSON,64.00,CHECK,2210,90105071
05/14/2021,63,103202,501333,CURD MARTIN INC,63.74,CHECK,5129,90103202
05/14/2021,63,103202,501332,CURD MARTIN INC,112.11,CHECK,5129,90103202
我尝试使用它,但它将字段$1的输出减少到“2”

gsub(///,"",$1)
更新:为了更加清晰,我在这里添加了我的awk脚本。我敢肯定,我随意使用那个愚蠢的“outspacer”变量并不是最好的选择!但是,它是有效的,所以我试图更多地关注日期字段中的斜杠。gsub消除字段$6中的小数点也会失败。仅供参考,我使用的是Windows10中使用Ubuntu Linux子系统的gawk。不确定这是否是逃逸失败的原因

BEGIN{
FS=","
RS="\r\n"};
{
    outspacer = " ";

printf("%3s%-14s%-30s%010.2f%-16s%-9s%-20s%-92s%9s%1s%-8s%-47s\r\n",outspacer, $2, $4, gsub(".","",$6), $8, outspacer, $5,outspacer, $9,outspacer,gsub("/","",$1),outspacer);
}
你可以用

awk-F,{outspacer=“”;a=$1;b=$6;gsub(“/”,a);gsub(/\/,”,b);printf(“%3s%-14s%-30s%010d%-16s%-9s%-20s%-92s%9s%1s%-8s%-47s\r\n”,outspacer,$2,$4,b,$8,outspacer,$5,outspacer,$9,outspacer,a,outspacer)}文件
请注意,
gsub
不会返回修改后的字符串,它实际上修改了
$1

因此,要真正能够使用修改后的
$1
,您可以将其分配给变量,例如
a
,然后使用
gsub
对其进行修改

这里,
a=$1;gsub(“/”,a)
用于将字段1的值设置为
a
变量,然后删除
/
,然后在
printf
命令中使用
a

有了GNU
awk
,您还可以像以前那样使用
gensub

awk-F,{outspacer=“”;printf(“%3s%-14s%-30s%010d%-16s%-9s%-20s%-92s%9s%1s%-8s%-47s\r\n),outspacer,$2,$4,gensub(/\./,“,”g“,$6),$8,outspacer,$5,outspacer,$9,outspacer,g
ensub(“/”,“,”g“,$1),outspacer)}文件

此处,
gensub(“/”,“,”g“,$1)
将字段1中出现的所有斜杠替换为空字符串,并返回第一个字段的更新值
gensub(/\/,“”,“,”g“,$6)
删除字段6中的所有点。

gsub(/\/,“”,$1)
应该可以工作
gsub(/,“”,“,$1)
似乎也可以。“我将此字段作为最后一个字段打印”->您可以添加完整的预期输出吗?anubhava和Wiktor建议的gsub()可以工作,只需记住设置
开始{FS=OFS=“,”}第一。还考虑将M/D/Y顺序改为“YYYYMMD”。在输出中,您可以对其进行排序,检查日期范围等。大家好。感谢您的所有回复。为了更清晰,我加载了我的awk脚本文件。我还更新了原始问题描述。使用@anubhava或Wiktor建议的gsub版本,我得到了相同的输出,其中该字段仅显示“2”作为输出。谢谢Wictor。它对日期字段起到了很好的作用。我尝试应用类似的逻辑删除$6的浮点值中的“.”。我怀疑它不起作用,因为我需要将指定的变量显式创建为字符串。对吗?对,忽略了它。您需要
awk-F,{outspacer=“”;printf(“%3s%-14s%-30s%010.2f%-16s%-9s%-20s%-92s%9s%1s%-8s%-47s\r\n”、outspacer、$2、$4、gensub(/\./、”“、'g'、$6)、$8、outspacer、$5、outspacer、$9、outspacer、g ensub(“/”、“、'g”、$1)、outspacer)}文件
。我已经更新了这两种解决方案。我对使用“%010.2f”有一种感觉正在放弃小数点替换。这是我对第1行的输出。它似乎仍然强制执行小数点后两位,而我实际上并不需要它。63 508138 0008591.00775 JOSHUA KATENBRINK90131629 05142021我必须在左侧填充零,目的是创建一个固定宽度的输出文件,并与每个字段的开始-结束位置相匹配。%010s显然不适用于字符串。也许最好的方法是,在生成输出后,我必须执行一些其他步骤,只需对““!感谢您的耐心和帮助。@Jurasick好的,那么为什么不使用
%010d
?printf格式字符串将是
%3s%-14s%-30s%010d%-16s%-s%-20s%-92s%9s%1s%-8s%-47s\r\n”