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只打印与正则表达式匹配的行。