使用awk或gawk脚本设计输出
我有一个awk脚本,它在一个.txt文件中给出了我想要的结果,但我关心的是结果是如何给出的:我把所有这些都放在一行中,我想设计它使用awk或gawk脚本设计输出,awk,gawk,Awk,Gawk,我有一个awk脚本,它在一个.txt文件中给出了我想要的结果,但我关心的是结果是如何给出的:我把所有这些都放在一行中,我想设计它 20140201 -73828274 20140202 7376288374 20140203 3837482437 ....... 20140228 -73629277 我希望输出以这种格式显示 20140201 -73828274 20140202 7376288374 20140203 3837482437 n
20140201 -73828274 20140202 7376288374 20140203 3837482437 ....... 20140228 -73629277
我希望输出以这种格式显示
20140201 -73828274
20140202 7376288374
20140203 3837482437
n n
n n
n n
20140228 73629277
我想把日期放在一边,相应的总数放在日期前面
这里使用了awk脚本
$ for file in *.txt;do awk -F,'NR==1{header=$0; next} {a[$1]+=$6+$14} END {for (i in a) {print i, a[i]};}' $file; done > red.txt
有什么想法吗?您可以使用
printf
而不是print
。将awk
脚本的END{}
部分更改如下:
END {for (i in a) {printf "%d\t%d\n", i, a[i]};}
在两个值(%d
)之间,它打印一个选项卡(\t
),并在末尾打印一个换行符(\n
)
或您的完整命令:
for file in *.txt;do awk -F,'NR==1{header=$0; next} {a[$1]+=$6+$14} END {for (i in a) {printf "%d\t%d\n", i, a[i]};}' $file; done > red.txt
使用
grep
和tr
如下所示
$ grep -oP '\S+\s+\S+' file | tr ' ' '\t'
20140201 -73828274
20140202 7376288374
20140203 3837482437
20140228 -73629277
她是使用
awk
awk -v RS=" " 'ORS=NR%2?RS:"\n"' file
20140201 -73828274
20140202 7376288374
20140203 3837482437
首先,我们将记录选择器设置为空格,因此每个日期都是一个新行。然后根据奇偶行号将输出记录选择器更改为空格或换行符
您也可以将
getline
用于此操作,但请注意,getline
有许多陷阱
awk -v RS=" " '{a=$0;getline;print a,$0}' file
20140201 -73828274
20140202 7376288374
20140203 3837482437
通过这种方式,您可以使用
printf
对输出进行更多控制。您不需要shell循环,awk完全能够处理多个文件,例如,使用GNU awk处理ENDFILE和delete array:
awk -F, 'FNR>1{a[$1]+=$6+$14} ENDFILE{for (i in a) print i, a[i]; delete a}' *.txt > red.txt
上述内容显然未经测试,因为您没有提供任何示例输入
您发布的脚本无法生成您显示的输出。在awk脚本运行之后,您还需要执行一些其他操作,以使输出文件的所有行都显示在一行上。我怀疑您可能没有再次引用变量(就像您没有在脚本中引用$file
),并执行以下操作:
var=$(cat red.txt)
echo $var
一旦脚本运行完毕,只需执行
cat red.txt
,您就会发现内容并不像您所说的那样全部在一行上。基本上就是您打印输出的方式。你能分享脚本以便我们提出修改建议吗?@kannamohan我添加了脚本它在shell上运行良好,但当打印到txt文件时,我仍然有相同的问题你有相同的问题,因为该问题与你的awk脚本无关。无论你在做什么,都可以显示文件的内容。在shell上也可以!我有我想要的设计,但当我想要在txt文件上输出时,我仍然在一行上保留所有元素awk-v RS=“”{a=$0;getline;print a,$0}file>output.txt“这是我使用的脚本”没关系,我修复了它:)