Jos*_*iah 5 script bash parsing
好的,所以我有一个包含数千个字符串的文件。每个人都在自己的线上。我想制作一个脚本,允许我获取这个文件,调用它list.txt,并从每一行中获取项目,并根据第一个字母或数字将其放入单独的文件中。例如,假设文件的前几行是这样的:
cheese
pizza
pepperoni
lettuce
grahamCrackers
0-0Foods
chicken
lentils
1-2Items
Run Code Online (Sandbox Code Playgroud)
我需要把它分解成这些:
cheese
chicken
Run Code Online (Sandbox Code Playgroud)
grahamCrackers
Run Code Online (Sandbox Code Playgroud)
lettuce
lentils
Run Code Online (Sandbox Code Playgroud)
pizza
pepperoni
Run Code Online (Sandbox Code Playgroud)
0-0Foods
Run Code Online (Sandbox Code Playgroud)
1-2Items
Run Code Online (Sandbox Code Playgroud)
我想在 OS X 上用 BASH 完成这个。谢谢。
哦,如果有帮助的话。每行上的项目永远不会有空格,它们将始终包含为一个单词。EG(从不鸡汤,而是鸡汤)
你可以只使用 gawk 并简化事情:
gawk '{n=substr($1,0,1); print >> n".txt"}' file.txt
Run Code Online (Sandbox Code Playgroud)
n=substr($1,0,1)从第一个字段 ( $1)的第一个位置 (0) 开始获取长度为 1 的子字符串,并将其保存到名为 的变量中n。
print >> n".txt"将 ( >>) 每一行附加到一个名为n.txt(其中n是第一个字母)的文本文件中。
要对前两个字母执行相同的操作,只需更改 的长度substr:
gawk '{n=substr($1,0,2); print >> n".txt"}' file.txt
Run Code Online (Sandbox Code Playgroud)
尝试这个
OLDIFS=$IFS
IFS='
'
typeset -a file
file=($(cat list.txt))
for i in "${file[@]}"; do
echo $i >> ${i:0:1}.txt
done
IFS=$OLDIFS
Run Code Online (Sandbox Code Playgroud)
请注意,IFS 部分通常不是必需的。另外,我在 Linux 上的 Zsh 4.3.17 和 Bash 4.2.37 上测试了它。
它的作用是声明一个数组,将文件的内容分配给该数组,然后循环数组的每个元素,因此每一行和回显该元素到文件中,并带有第一个字母的名称加上“.txt”附加到它。
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |