如何在命令行中整理数据 | Linux 中国
命令行审计不会影响数据库,因为它使用从数据库中释放的数据。-- Bob Mesibov
有用的原文链接请访问文末的“
原文链接
”获得可点击的文内链接、全尺寸原图和相关文章。致谢编译自 | http://opensource.com/article/18/5/command-line- src="http://img5.shadafang.com/img.php?http://mmbiz.qpic.cn/mmbiz_jpg/W9DqKgFsc68qwiccyQqqRwtpEKJtQugjaPbxjZI4G9sLf4MujysAePK6iaxnASzI6Smg50huFBMlU3wBJ2mpiaRtQ/640?wx_fmt=jpeg" title="Tshirt, Keep Calm and Open A Terminal" />
Tshirt, Keep Calm and Open A Terminal
例子
假设我想在一个大的表中的特定字段中找到最长的数据项。 这不是一个真正的数据审计任务,但它会显示 shell 工具的工作方式。 为了演示目的,我将使用制表符分隔的表 full0 ,它有 1,122,023 条记录(加上一个标题行)和 49 个字段,我会查看 36 号字段。(我得到字段编号的函数在我的
网站
[8]
上有解释)首先,使用 tail 命令从表 full0 移除标题行,结果管道至 cut 命令,截取第 36 个字段,接下来,管道至 awk ,这里有一个初始化为 0 的变量 big ,然后 awk 开始检测第一行数据项的长度,如果长度大于 0 ,awk 将会设置 big 变量为新的长度,同时存储行数到变量 line 中。整个数据项存储在变量 text 中。然后 awk 开始轮流处理剩余的 1,122,022 记录项。同时,如果发现更长的数据项时,更新 3 个变量。最后,它打印出行号、数据项的长度,以及最长数据项的内容。(在下面的代码中,为了清晰起见,将代码分为几行)
tail
-
n
+
2
full0 \
>
|
cut
-
f36 \
>
|
awk
"BEGIN {big=0} length($0)>big \
> {big=length($0);line=NR;text=$0} \
> END {print "\nline: "line"\nlength: "big"\ntext: "text}"
大约花了多长时间?我的电脑大约用了 4 秒钟(core i5,8GB RAM);
现在我可以将这个长长的命令封装成一个 shell 函数,longest,它把第一个参数认为是文件名,第二个参数认为是字段号:
现在,我可以以函数的方式重新运行这个命令,在另一个文件中的另一个字段中找最长的数据项,而不需要去记忆这个命令是如何写的:
最后调整一下,我还可以输出我要查询字段的名称,我只需要使用 head 命令抽取表格第一行的标题行,然后将结果管道至 tr 命令,将制表位转换为换行,然后将结果管道至 tail 和 head 命令,打印出第二个参数在列表中名称,第二个参数就是字段号。字段的名字就存储到变量 field 中,然后将它传向 awk ,通过变量 fld 打印出来。(LCTT 译注:按照下面的代码,编号的方式应该是从右向左)
longest
()
{
field
=
$
(
head
-
n
1
"$1"
|
tr
"\t"
"\n"
|
tail
-
n
+
"$2"
|
head
-
n
1
);
\
tail
-
n
+
2
"$1"
\
|
cut
-
f
"$2"
|
\
awk
-
v fld
=
"$field"
"BEGIN {big=0} length($0)>big \
{big=length($0);line=NR;text=$0}
END {print "\nfield: "fld"\nline: "line"\nlength: "big"\ntext: "text}"
;
}
注意,如果我在多个不同的字段中查找最长的数据项,我所要做的就是按向上箭头来获得最后一个最长的命令,然后删除字段号并输入一个新的。
via:
http://opensource.com/article/18/5/command-line-data-auditing
作者:
Bob Mesibov
[10]
选题:lujun9972
译者:amwps290
校对:wxy
本文由
LCTT
原创编译,Linux中国
荣誉推出- 演出少名家少出路何在 说书人转战网络能否重生?
- 刘强东回国了,调查还在进行中......
- 一天翻台15+,这家肥肠粉如何在川渝腹地做成品类冠军?
- 60平米的餐厅,1年卖出10亿,“未来餐厅”底气何在?
- 60平米的餐厅,1年卖出10亿,计划开店1万家,底气何在?
- “滴滴”为何在日本遭封杀?
- 16个小故事,看古人如何在对话里斗才气!| 推广
- 山东寿光水灾防疫工作进行中 2.5万多头死猪全部无害化
- 全面推行中小学校内课后托管
- 超高速星缘何在银河系狂飙