我有一个包含1000行和10列的数据集。这是样本数据集
A,B,C,D,E,F,
a,b,c,d,e,f,
g,h,i,j,k,l,
m,n,o,p,q,r,
s,t,u,v,w,x,
从此数据集中,我要将列A的值为“ a”或“ m”的行复制到新的csv文件中。我也想复制标题。
我尝试使用awk。它复制了所有行,但没有复制标题。
awk '{$1~/a//m/ print}' inputfile.csv > outputfile.csv
如何将标头也复制到新的outputfile.csv中?
谢谢。
答案 0 :(得分:2)
考虑到标题将位于第一行,请您试一试。
awk 'BEGIN{FS=OFS=","} FNR==1{print;next} $1 ~ /^a$|^m$/' Input_file > outputfile.csv
或根据Cyrus先生的评论添加以下内容:
awk 'BEGIN{FS=OFS=","} FNR==1{print;next} $1 ~ /^(a|m)$/' Input_file > outputfile.csv
或按照Ed先生的评论尝试以下操作:
awk -F, 'NR==1 || $1~/^[am]$/' Input_file > outputfile.csv
在OP的尝试中添加了更正:
FS
和OFS
作为,
,因为行是用逗号分隔的。FNR==1
条件,这意味着它正在此处检查第一行并简单地打印它,因为我们要在输出文件中打印标题。它将打印第一行,然后next
将跳过此处的所有其他语句。$1 ~ /^a$|^m$/
答案 1 :(得分:2)
这可能对您有用(GNU sed):
sed '1b;/^[am],/!d' oldFile >newFile
始终打印第一行,并删除所有未出现a,
或m,
的行。
替代:
awk 'NR==1 || /^[am],/' oldFile >newFile
答案 2 :(得分:1)
awk。将字段分隔符(FS
)设置为,
并输出当前行(如果它是第一行或第一列包含a
或m
)。
awk 'NR==1 || $1=="a" || $1=="m"' FS=',' in.csv >out.csv
输出到out.csv:
A,B,C,D,E,F, a,b,c,d,e,f, m,n,o,p,q,r,
答案 3 :(得分:1)
$ awk -F, 'BEGIN{split("a,m",tmp); for (i in tmp) tgts[tmp[i]]} NR==1 || $1 in tgts' file
A,B,C,D,E,F,
a,b,c,d,e,f,
m,n,o,p,q,r,
答案 4 :(得分:-1)