我有以下格式的数据文件
1|col2|col3|105,230,3,44,59,62|col5
2|col2|col3|43,44|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5
4|col2|col3|1,2,37|col5
因此,上述给定数据的理想记录是
1|col2|col3|105,230,3,44,59,62|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5
我目前正在使用以下命令,但我正在寻找更有效/有组织的一个
awk -F"|" '$4 ~ /,3,/ || $4 ~ /^3,/ || $4 ~ /,3$/'
答案 0 :(得分:5)
短GNU this.fetchProductSubscription = this.fetchProduct$.subscribe(result => this.someFn(value));
解决方案:
awk
awk -F'|' '$4 ~ /\<3\>/' file
和\<
- 分别代表字的开始和结束 输出:
\>
或更统一/便携的:
1|col2|col3|105,230,3,44,59,62|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5
答案 1 :(得分:2)
如果您希望第4列中包含3
的任何值,则打印该行,如果是,则awk
之后可以帮助您:
awk -F"|" '{num=split($4, array,",");for(i=1;i<=num;i++){if(array[i]==3){print;next}}}' Input_file
答案 2 :(得分:0)
有一种惯用的方法来处理使用GNU awk将字段拆分为子字段(尽管在此上下文中它是过度的)。基本流程如下:
rec = $0
oFS = FS
FS=","
$0
设置为您感兴趣的字段$0 = $4
FS = oFS
例如:
parse.awk
BEGIN { FS = "|" }
{ rec = $0 }
{
oFS = FS
FS = ","
$0 = $4
}
/\<3\>/ {
print rec
}
{ FS = oFS }
像这样运行:
awk -f parse.awk infile
输出:
1|col2|col3|105,230,3,44,59,62|col5
3|col2|col3|1,2,3,4,5,6,7,8|col5