Kit*_*man 8 grep sed awk text-processing
我在 HDFS 中工作,并试图获取第 4 列以数字 5 开头的整行:
100|20151010|K|5001
695|20151010|K|1010
309|20151010|R|5005
410|20151010|K|5001
107|20151010|K|1062
652|20151010|K|5001
Run Code Online (Sandbox Code Playgroud)
因此应该输出:
100|20151010|K|5001
309|20151010|R|5005
410|20151010|K|5001
652|20151010|K|5001
Run Code Online (Sandbox Code Playgroud)
最简单的方法可能是awk
:
awk -F'|' '$4~/^5/' file
Run Code Online (Sandbox Code Playgroud)
该-F'|'
设置字段分隔符|
。该$4~/^5/
如果第四场开始会是真的5
。awk
当某项评估为 true 时的默认操作是打印当前行,因此上面的脚本将打印您想要的内容。
其他选择是:
珀尔
perl -F'\|' -ane 'print if $F[3]=~/^5/' file
Run Code Online (Sandbox Code Playgroud)
同样的想法。所述-a
开关使perl
上由给定的值分割其输入字段-F
到阵列@F
。然后我们打印数组的第 4 个元素(字段)(数组从 0 开始计数)是否以 a 开头5
。
grep
grep -E '^([^|]*\|){3}5' file
Run Code Online (Sandbox Code Playgroud)
正则表达式将匹配一串 non-|
后跟|
3 次,然后是5
.
GNU 或 BSD sed
sed -En '/([^|]*\|){3}5/p' file
Run Code Online (Sandbox Code Playgroud)
在-E
上扩展正则表达式匝数和-n
禁止常规输出。正则表达式与grep
上述相同,p
最后sed
只打印与正则表达式匹配的行。