我试图将与特定模式匹配的文件名分离到一个单独的文件中,并将其内容分离到与特定模式匹配的不同文件中。我的文件名包含特殊字符,如“|”
我尝试使用 grep 命令。 Grep Ril 和 Grep -H 打印文件名,但它不起作用。
#!bin/bash
cd home/test
let "x = 1"
for file in $(find home/test/* -type f -name "*.txt") ;
do
var=$(echo "${x}|fill|${file##*/}")
echo "${var}" | grep -n "*|fill|*.txt" >header.txt
myvar=$(sed 's/^/'${x}'|/g' ${file})
echo "${myvar}" |grep -n "*|Ball|*" >Ball.txt
echo "${myvar}" |grep -n "*|Fire|*" >Fire.txt
let x=x+1
done
unset 'x'
let x=x+1
done
unset 'x
我有以下格式的文件名:
1|fill|abc.txt
2|fill|def.txt
所有文件中的“填充”保持不变。最终文件应具有如下值
1|fill|abc.txt
2|fill|def.txt
3...
4...
5...
etc...
然后,每个文件包含不同的内容。
File1 包含与此模式类似的数据:
1|Ball|202029|
1|Cat|202029|
1|fire|202898
...
文件 2 包含与此模式类似的数据:
2|Bat|202029|
2|Ball|202029|
2|cat|202898
现在最终的输出应该是这样的:所有包含“ball”的数据应该在一个单独的文件中,“cat”在单独的文件中,“fire”在单独的文件中等等。
我不确定下面的代码会做你想要的事情,但我相信它会接近它,让我知道,我会相应地更新它。
下面的文件将与您在脚本中使用的其他文件位于同一目录中,并且它们以 .txt 结尾,下一个脚本运行也将读取它们。
header.txt
B.txt
C.txt
F.txt
#!/bin/bash
# i put the directory in variable, so it can be changed at a single place.
dir='/home/test'
#if cd failed , print erron on standard error output and terminate script.
if ! cd "${dir}" ;then
echo "cd failed into ${dir}" >&2
exit 1
fi
# set counter to 1
let "x = 1"
# Null file contents or create new file
# without this file content will be preserved from earlier script runs.
> header.txt
> B.txt
> C.txt
> F.txt
# go trhought every file in ${dir} path that name end with .txt and it is a regular file
for file in $(find ${dir} -type f -name "*.txt") ;
do
# store basefilename in variable with aditional counter number and text |Fill| front of it.
filename=$(echo "${x}|fill|${file##*/}")
echo "${filename}" >> header.txt
# this can be used as well:
##echo "${x}|fill|${file##*/}" >> header.txt
# only difference is you stored the output into variable.
# find matching line in files
grep -i '|Ball|' ${file} | sed 's/^/'${x}'|/g' >> B.txt
grep -i '|Cat|' ${file} | sed 's/^/'${x}'|/g' >> C.txt
grep -i '|Fire|' ${file} | sed 's/^/'${x}'|/g' >> F.txt
# add 1 to counter
let "x=x+1"
done
# unset counter
unset 'x'
输入文件:
文件1.txt
1|Ball|202029|
1|Cat|202029|
1|fire|202898
文件2.txt
2|Bat|202029|
2|Ball|202029|
2|cat|202898
输出文件:
标题.txt
1|fill|header.txt
2|fill|B.txt
3|fill|C.txt
4|fill|F.txt
5|fill|File1.txt
6|fill|File2.txt
B.txt
5|1|Ball|202029|
6|2|Ball|202029|
C.txt
5|1|Cat|202029|
6|2|cat|202898
F.txt
5|1|fire|202898
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)