已关闭,此问题需要details or clarity。它目前不接受回答。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。
2个月前关闭。
Improve this question
我需要你在unix/awk的帮助,以在csv文件(逗号分隔的文件)中的数据在另一个文件中给定的某些顺序。我在这方面的知识有限。
示例:要重新排列的文件。
PRODUCTCODE SITE BATCHID LV1P_DESCRIPTION
PRD-0989 Static BATCH01 Estract
PRD-0990 Static BATCH02 Xstract
PRD-0991 Static BATCH03 8stract
PRD-0992 Static BATCH04 errs
PRD-0993 Static BATCH05 dgerrr
PRD-0994 Static BATCH06 Narros
PRD-0995 Static BATCH07 sef3r
并且如果传递输入列顺序为[这可以存储在另一个文件中]
PRODUCTCODE,LV1P_DESCRIPTION,BATCHID,SITE
那么我的输出文件应该如下所示
PRODUCTCODE LV1P_DESCRIPTION BATCHID SITE
PRD-0989 Estract BATCH01 Static
PRD-0990 Xstract BATCH02 Static
PRD-0991 8stract BATCH03 Static
PRD-0992 errs BATCH04 Static
PRD-0993 dgerrr BATCH05 Static
PRD-0994 Narros BATCH06 Static
PRD-0995 sef3r BATCH07 Static
3条答案
按热度按时间ep6jt1vc1#
如果:
你可以尝试(使用任何POSIX
awk
,使用GNUawk
和macOS附带的awk
进行测试,输出前缀为-|
):1.设置逗号作为输入和输出字段分隔符(
-F, -v OFS=,
)。1.将所需的输出顺序作为变量
o
(-v o='...'
)传递。1.在输入字段分隔符上的
BEGIN
块分割变量o
中,将结果存储在数组h
中,并将列数存储在变量n
中。1.对于第一行,存储在数组
a
中,字段作为键,字段编号作为值(a[$i]=i
)。转到下一行(next
)。1.对于其他行,按所需顺序(
$(a[h[i]])
)打印n
第一个字段,后跟输出字段分隔符,但最后一个字段后跟一个换行符。如果所需的输出顺序存储在另一个文件的第一行,比如
bar.csv
:NR==1
仅对第一个文件的第一行为真。NR!= FNR && FNR==1
仅对第二个文件的第一行为真。7uhlpewt2#
TXR Lisp中的解决方案:
文件如下所示:
get.tl
中的代码:看起来好像数据可能是制表符分隔的,制表符被转换为空格,制表符宽度为4。要输出制表符分隔的,我们可以在
awk
宏中添加(:set ofs "\t")
子句。c86crjj03#