我的问题涉及以下问题: 我有文件:
FileA:
Peter Programmer
Frank Chemist
Charles Physicist
John Programmer
Alex Programmer
Harold Chemist
George Chemist
我现在从FileA获取了所有作业信息并将其保存到唯一列表(FileB)。
FileB:
Programmer
Chemist
Physcist
(假设FileA继续使用更多人和冗余信息)
我现在要做的是从FileA获取所有作业类,并为每个Job-Class创建一个新文件,以便最终我有:
FileProgrammer
Peter Programmer
John Programmer
Alex Programmer
FileChemist
Frank Chemist
Harold Chemist
George Chemist
FilePhysicist
Charles Physicist
我想从作业文件列表中grep
作业名称的模式,并为另一个原始文件中存在的每个作业名称创建一个新文件。
所以实际上,我的列表中有56个唯一元素,原始文件有几列(制表符分隔)。
到目前为止我做的是:
cut -f2 | sort | uniq > Jobs
grep -f(tr '\t' '\n' < "${Jobs}") "${FileA}" > FileA+"${Jobs}"
我假设在每个新模式匹配时会创建一个新文件,但我意识到它只会复制文件,因为没有增量或迭代文件创建。
由于我对bash的经验还没有深入发展,我希望你们能帮助我。提前谢谢。
@Update: 输入文件如下所示:
4 23454 22110 Direct + 3245 Corrected
3 21254 12110 Indirect + 2319 Paused-@2
11 45233 54103 Direct - 1134 Not-Corrected
基本上,我希望在Corrected第7列中具有状态的所有内容都位于名为correct的文件中,因此对于第7列的每个唯一值都是如此。
答案 0 :(得分:2)
答案渴望 Awk ,这就是你如何做到的,
awk '{unique[$2]=(unique[$2] FS $1)}\
END {for (i in unique) { \
len=split(unique[i],temp); \
for (j=1;j<=len;j++) print temp[j],i > "File"i".txt"} }' \
file
我们的想法是使用unique[$2]=(unique[$2] FS $1)
创建哈希图,字面意思是,将$2
视为数组unique
的索引并拥有从$1
追加的值,所以在输入文件的每一行处理结束时,数组看起来像这样,
# <key> <value(s)>
Chemist Frank Harold George
Physicist Charles
Programmer Peter John Alex
在处理完所有行之后执行END
子句,因此从构造的数组中,使用在单个whistespace上拆分的split()
函数,我们将数组值的内容存储到数组temp
和len
包含拆分后产生的元素数。
每个哈希索引的循环以及每个分割元素,这些值将被打印并存储在文件中。
答案 1 :(得分:1)
您可以在循环中使用var positions = Array<Dictionary<String,String>>()
positions.append(["longitude":String(location.coordinate.longitude),
"latitude":String(location.coordinate.latitude),
"time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))])
positions.append(["longitude":String(location.coordinate.longitude),
"latitude":String(location.coordinate.latitude),
"time":String(Int64(location.timestamp.timeIntervalSince1970 * 1000.0))])
//Now set this positions array with positions key in params dictionary
let params: Dictionary<String, Any> = ["hash":"asdh832","positions": positions]
let data = try JSONSerialization.data(withJSONObject: params , options: [])
let dataString = String(data: data,encoding: String.Encoding.utf8)!
执行以下操作:
grep
请注意,在您的问题的FileA中,您写了&#34;物理学家&#34;在FileB中你写了#34; Physcist&#34;,所以他们不会匹配。无论如何,如果你正确地写了两个,上面的命令就可以了。