gpt4 book ai didi

bash - 根据输入文件批量创建名称和内容的文件

转载 作者:行者123 更新时间:2023-11-29 09:29:16 26 4
gpt4 key购买 nike

我是一名 mac OS 用户,正在尝试批量创建一堆文件。我有一个包含数百个术语/主题的列的文本文件,例如:

hydrogen
oxygen
nitrogen
carbon
etcetera

我想以编程方式用从该主题列表生成的文本文件填充一个目录。例如,“hydrogen.txt”和“oxygen.txt”等,每个文件都是通过遍历我的 list_of_names.txt 文件的行创建的。有些行是一个词,但其他行是两个或三个词(例如:“一氧化碳”)。我已经想出了怎么做:

awk 'NF>0' list_of_names.txt | while read line; do touch "${line}.txt"; done

此外,我需要在每个文件中创建两行内容,内容是静态的和动态的...

# filename
#elements/filename

...在上面的示例中,井号 (“#”) 和“elements/”在所有创建的文件中都是相同的,但“文件名”将是可变的(例如:“hydrogen”代表“hydrogen.txt”和“oxygen”代表“o​​xygen.txt”等)。另一个问题是,如果第二行内容中出现任何空格,则需要有一个尾随的井号。例如:

# filename
#elements/carbon monoxide#

...虽然这最后一部分不是一个破坏者,我可以使用 grep 修改 list_of_names.txt,这样像“carbon monoxide”这样的短语变成“carbon_monoxide”,稍后再处理它的影响。 (但如果很容易保留空格,我会更喜欢。)

经过几个小时的搜索并尝试使用 sed、awk 等,我被困在一个充满文件的目录中,文件名.txt 格式正确,但我无法进一步了解。大多数情况下,我认为我的努力都失败了,因为我能找到的解决方案使用的是我不熟悉的命令,它们是为 GNU 构建的,无法在 Mac OS 的终端中正确执行。

我可以分多个步骤处理这个问题(即首先制作所有 files.txt,然后运行第二步来填充文件的内容),或者作为一个命令来制作文件及其所有文件同时内容(从人类时间尺度“同时”)。

我可怕的伪代码(大写),它看起来像 2 个步骤:

awk 'NF>0' list_of_names.txt | while read line; do touch "${line}.txt"; done
awk 'NF>0' list_of_names.txt | while read line; OPEN "${line}.txt" AND PRINT "# ${line}\n#elements/${line}"; IF ${line} CONTAINS CHARACTER " " PRINT "#"; done

最佳答案

您可以使用一个简单的 Bash 循环并一次性创建文件:

#!/bin/bash

while read -r name; do # loop through input file content
[[ $name ]] || continue # skip empty lines
output=("# $name") # initialize the array with first element
trailing=
[[ $name = *" "* ]] && trailing="#" # name has spaces in it
output+=("#elements/$name$trailing") # name doesn't have a space
printf '%s\n' "${output[@]}" > "$name.txt" # write array content to the output file
done < list_of_names.txt

在 awk 中做:

awk '
NF {
trailing = (/ / ? "#" : "")
out=$0".txt"
printf("# %s\n#elements/%s%s\n", $0, $0, trailing) > out
close(out)
}
' list_of_names.txt

关于bash - 根据输入文件批量创建名称和内容的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156364/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com