这是我的 txt 文件的示例
John
NY
2019
APR
Mark
SC
2019
JAN
Ava
CA
2018
AUG
这是目标txt文件的示例
Name,Location,Year,Month
John, NY,2019,APR
Mark, SC,2019,JAN
Ava, CA,2018,AUG
字段的数量不会改变。基本上,我如何编写一个脚本来识别每 4 行是月份,之后的行是名称?
答案1
我无法判断您要问的两个潜在问题中的哪一个 - 所以我会对这两个问题进行广泛的介绍,如果我有时间解决这个问题,我将研究您明天早上可能使用的实际终端/shell 命令(然后扩展我的答案!)。
所以你的问题可以理解为
- a):将文件从“逐行”排列排序为“类似表格”(在您的示例中,它是C奥玛-s分离-v数值文件 [也称为数据集]) 安排。这实际上相当简单,并且需要一个循环结构(即为每个条目重复相同的指令集),并且在其中您将获取组成条目的 4 行的值(例如“John”、“NY”) 、 "2019"、"APR" ) 并将它们依次附加到新行,在值之间插入逗号 (",")。
- b):根据变量的类型对文件的值进行排序,然后将所有内容重新组合成一个有序的“表格”结构(例如,作为 csv 文件,输出与上面描述的非常相似)。这有点棘手/复杂,但只要您的值/变量范围受到限制 - 如您的示例所示(月份的 12 个三字母缩写、美国各州的 50 个两字母缩写等),那么您可以将每个值与可能的变量集/范围进行比较,并(相对可靠地)确定它是哪种类型的变量。然后,当然,您可以将它们像串珠一样串在一起,放入您的新文件中,只需使用比上面描述的更多的魔法/胶水,将它们放在正确的位置(也就是说,假设我在这里所说的,属于一个条目的值并不总是按相同的顺序排列)。
现在就是这样 - 在我使用示例终端/shell 输入之前,最好知道您指的是上述两个问题中的哪一个:D!
问候, 肖恩·谢勒
答案2
这里似乎不涉及任何排序 - 只是反序列化为固定数量(4)的列。您可以使用
paste -d, - - - - < file
或者
pr -aT -s, -4 < file
或者
awk '{ORS = NR%4 ? "," : "\n"} 1' file
前任。
$ awk 'BEGIN{print "Name,Location,Year,Month"} {ORS = NR%4 ? "," : "\n"} 1' file
Name,Location,Year,Month
John,NY,2019,APR
Mark,SC,2019,JAN
Ava,CA,2018,AUG