我已经寻找这里类似的话题,但大多数问题包括单字符分隔符。
我有文字的这个示例:
Some text here,
continuing on next lineDELIMITERSecond chunk of text
which may as well continue on next lineDELIMITERFinal chunk
和期望的输出是包含列表(extracted=()
):
Some text here,
continuing on next line
Second chunk of text
which may as well continue on next line
Final chunk
正如可以从样品中可以看出,“分隔符”作为分割符。
我曾尝试在SO含AWK众多样品,更换等。
如果你不想更改默认RS
值,那么你可以请尝试以下。
awk '{gsub("DELIMITER",ORS)} 1' Input_file
您可以尝试使用数组。
#!/bin/bash
str="continuing on next lineDELIMITERSecond chunk of text
which may as well continue on next lineDELIMITERFinal chunk";
delimiter=DELIMITER
s=$str$delimiter
array=();
while [[ $s ]]; do
array+=( "${s%%"$delimiter"*}" );
s=${s#*"$delimiter"};
done;
declare -p array
这将文本分成根据您的分隔符阵的结果将是你的文字的数组。
阵列=([0] =“继续上下一行” [1] = $“的文本\第二块nwhich不妨继续下一行” [2] =“最终块”)
可以使用阵列索引访问每一行或者可以打印用printf“%S \ N”中的所有行“$ {阵列[@]}”
其结果将是
继续对文本的下一行第二块可能还有继续下一行最后一块
该解决方案为您提供了一个机会,做了很多与你的文字。
你可以尝试这样的:
awk 'BEGIN {RS="DELIMITER";} {print}' input_file
然后将其分配给变量,等等。
随着AWK请尝试以下方法:
awk -v RS='^$' -v FS='DELIMITER' '{
n = split($0, extracted)
for (i=1; i<=n; i++) {
print i". "extracted[i]
}
}' sample.txt
其中收益率:
1. Some text here,
continuing on next line
2. Second chunk of text
which may as well continue on next line
3. Final chunk
如果你需要对AWK阵列转移到bash的阵列,将根据阵列上的后续工序需要进一步的步骤。
我认为在这个问题面临的最大挑战是要正确处理空间,换行,分隔符,然后把所有的东西在数组中。它是只拆分文件,那么这将是太容易了。这个怎么样模板:
#!/bin/bash
gencode(){
echo -e "extracted=(); read -r -d '' item <<-DELIMITER"
sed 's:DELIMITER:\n&\nextracted+=("$item"); read -r -d "" item <<-&\n:' Input_file;
echo -e "DELIMITER\n"'extracted+=("$item")'
}
gencode|cat -n # for explaination purpose only
eval "`gencode`" # do not remove "eval"
for (( i=0; i < ${#extracted[@]}; i++ )); do # print results
echo "$i: ${extracted[i]}"
done
输出
1 extracted=(); read -r -d '' item <<-DELIMITER
2 Some text here,
3 continuing on next line
4 DELIMITER
5 extracted+=("$item"); read -r -d "" item <<-DELIMITER
6 Second chunk of text
7 which may as well continue on next line
8 DELIMITER
9 extracted+=("$item"); read -r -d "" item <<-DELIMITER
10 Final chunk
11 DELIMITER
12 extracted+=("$item")
0: Some text here,
continuing on next line
1: Second chunk of text
which may as well continue on next line
2: Final chunk
您可以尝试的Perl。随着-0777选,PERL吸食整个文件到$ _变量。然后,您可以分割使用的分隔符的内容。看一下这个。
$ perl -0777 -ne '@x=split("DELIMITER");print join("\n\n",@x) ' hubbs.txt
Some text here,
continuing on next line
Second chunk of text
which may as well continue on next line
Final chunk
$
添加阵列位置在打印时
$ perl -0777 -ne '@x=split("DELIMITER"); for(@x) { print ++$i,". $_\n" } ' hubbs.txt
1. Some text here,
continuing on next line
2. Second chunk of text
which may as well continue on next line
3. Final chunk
$