我有一个制表符分隔文件,我想根据两列拆分成较小的文件。我的数据如下所示:
360.40 hockey james april expensive 1200.00 hockey james may expensive 124.33 baseball liam april cheap 443.12 soccer john may moderate
我想通过第三和第五列解析这些行。
最终结果将是以第三和第五列命名的三个不同文件,如下所示:
james-expensive.tsv liam-cheap.tsv john-moderate.tsv
在每个文件中,我只想要与该名称/费用类型相关联的行中的第一个值。因此,在exameple的james-expensive.tsv中,该文件将包含一列:
360.40
1200.00
我想也许某种awk脚本或sed脚本可以解决这个问题,但我不太清楚从哪里开始。
如果使用awk或sed执行此操作似乎是一个坏主意,那也有助于了解。
答案 0 :(得分:1)
使用awk
:
awk '{ print $1 > $3 "-" $5 ".tsv" }' your_file
结果:
$ for F in *.tsv; do echo "---- $F ----"; cat "$F"; done
---- james-expensive.tsv ----
360.40
1200.00
---- john-moderate.tsv ----
443.12
---- liam-cheap.tsv ----
124.33
nawk
的更新:
awk '{ f = $3 "-" $5 ".tsv"; print $1 > f }' your_file
防止打开太多文件:
awk '{ f = $3 "-" $5 ".tsv" } !a[f]++ { printf "" > f } { print $1 >> f; close(f) }' your_file
答案 1 :(得分:0)
你没有标记perl,但这里有一个oneliner:
perl -lane '`echo "$F[0]" >> $F[2]-$F[4].tsv`' file