我的查询是我有一个有11列的csv文件。我想提取有7列数字的记录。请注意第7列有字符串以及数字。使用awk命令但是没有工作
答案 0 :(得分:1)
如果我理解,你想要7列的数字作为数字吗?
你可以使用grep来做到这一点。随着','作为分隔符:
grep ".*,.*,.*,.*,.*,.*,[0-9]*,.*" yourfile.csv
如果您只想要7列,请使用cut(-d =>分隔符,-f选择字段)
cat yourfile | cut -d, -f7 | grep "[0-9]*"
答案 1 :(得分:0)
我不知道您是否专门寻找bash命令,但我建议您使用像python这样的脚本语言。在python中实现它的一种方法是:
count = 0
prunedColumns = []
with open('FILENAME','r') as f:
for line in f:
count = 0
for entry in line.split(','):
try:
float(entry)
count += 1
except ValueError:
continue
if count == 7:
prunedColumns.append(line)
print(prunedColumns)
答案 2 :(得分:0)
首先是一些测试数据:
$ cat file
1 2 3 4 5 6 7 a b c d # seven numbers, a hit
1 2 3 4 5 6 a b c d e # six, a miss
1 2 3 4 5 6 7 8 a b c # eight, a miss
1 2 3 4 5 6 7a b c d e # seven, a hit
在awk中:
$ awk '{
for((i=1)&&c=0;i<=NF;i++) # check each field
if($i~/[0-9]+/) # if there are numbers in it
c++ # iterate counter
}
c==7 # if there are 7 fields, print record
' file
1 2 3 4 5 6 7 a b c d # seven numbers, a hit
1 2 3 4 5 6 7a b c d e # seven, a hit
答案 3 :(得分:0)
在这里再尝试一种方法,使用与James Brown在帖子中使用的相同的Input_file。
awk '{val=$0;if(gsub(/[0-9]+/,"",val)==7){print}}' Input_file
输出如下。
1 2 3 4 5 6 7 a b c d # seven numbers, a hit
1 2 3 4 5 6 7a b c d e # seven, a hit
答案 4 :(得分:0)
cat file.csv | awk '{print $7}'| egrep -v [a-z]+