【发布时间】:2017-07-20 18:16:05
【问题描述】:
如果我有一个制表符分隔的数据文件 input.dat,其格式如下:
#id acct name city age
12 100290 Sally San Francisco 24
15 102911 Jerry Sacramento 40
99 102134 Amir Eureka 82
当数据通过管道时,我可以使用cut(1) 或类似的东西来运行多个处理功能,例如:(lookup_id, scrub_acct, scrub_name, lookup_city, scrub_age) 每个字段吗?
使用一个字段很容易做到这一点:
cat input.dat | cut -f1 | lookup_id > output.dat
但我想知道是否有办法按字段执行此操作,并将结果重定向到 output.dat。
#id acct name city age
AA XXXXX0 SXXXX city-57 20s
AC XXXXX1 JXXXX city-29 40s
AF XXXXX4 AXXXX city-100 80s
也许一个预先问题是你能(简单地做到这一点)吗?
我也在考虑paste(1) 是否可以替代将列粘在一起,但也许有更好的方法。
【问题讨论】:
-
我建议看看
awk。 -
好点,我想你可以在每个字段上运行一个函数并启动一个子shell。有没有办法用 cut 做到这一点? awk 有时就是这样的野兽。 @赛勒斯
-
那么
lookup_id, scrub_acct, scrub_name, lookup_city, scrub_age是shell函数吗? -
其中一些可能是,其他可能正在执行 api 调用或数据库查询。 @anubhava
-
你的问题很不清楚!
lookup_id、scrub_acct等应该做什么,它们应该取什么参数?
标签: bash pipe cut io-redirection