更改 FS 和 RS 以解析换行符
Change FS and RS to parse newline char
我在 shell 脚本中使用 awk 来解析文件。
我的问题已被标记为与另一个问题重复,但我想使用 awk 但没有找到相同的问题
文件格式如下:
Hi everyone I'm new\n
Can u help me please\n
to split this file\n
with awk ?\n
我希望的结果:
tab[0]=Hi everyone I'm new
tab[1]=Can u help me please
tab[2]=to split this file
tab[3]=with awk ?
所以我尝试更改 FS 和 RS 值以尝试获得我想要的但没有成功。这是我尝试过的:
config=`cat `
tab=($(echo $config | awk '
{
for (i = 1; i < (NF); i++)
print $i;
}'))
我得到的是:
Hi
everyone
I'm
new
Can
u
help
me
please
to
split
this
file
with
awk
你知道如何进行吗? :/
问题是无论您在 awk 中如何解析文件,它都会作为简单字符串返回到 shell。
AWK将一个文件拆分为记录(以\n结尾的行),记录进一步拆分为字段(以FS分隔,默认为space)。
为了将返回的字符串赋值给一个数组,需要将shell的IFS设置为换行,或者将行逐一赋值给数组项(可以用NR过滤记录,这将要求您使用 AWK 多次读取该文件)。
您最好的做法是仅在 AWK 中打印记录并使用复合赋值将它们分配给 bash 数组,并将 IFS 设置为换行符
#/bin/bash
declare -a tab
IFS='
'
# Compount assignment: array=(words)
# Print record: { print } is the same as { print [=10=] }
# where [=10=] is the record and ... $N are the fields in the record
tab=($(awk '{ print }' file))
unset IFS
for index in ${!tab[@]}; do
echo "${index}: ${tab[index]}"
done
# Output:
# 0: Hi everyone I'm new
# 1: Can u help me please
# 2: to split this file
# 3: with awk ?
注意 awk
几乎不被使用,应该用简单的 cat
代替。
我在 shell 脚本中使用 awk 来解析文件。 我的问题已被标记为与另一个问题重复,但我想使用 awk 但没有找到相同的问题
文件格式如下:
Hi everyone I'm new\n
Can u help me please\n
to split this file\n
with awk ?\n
我希望的结果:
tab[0]=Hi everyone I'm new
tab[1]=Can u help me please
tab[2]=to split this file
tab[3]=with awk ?
所以我尝试更改 FS 和 RS 值以尝试获得我想要的但没有成功。这是我尝试过的:
config=`cat `
tab=($(echo $config | awk '
{
for (i = 1; i < (NF); i++)
print $i;
}'))
我得到的是:
Hi
everyone
I'm
new
Can
u
help
me
please
to
split
this
file
with
awk
你知道如何进行吗? :/
问题是无论您在 awk 中如何解析文件,它都会作为简单字符串返回到 shell。
AWK将一个文件拆分为记录(以\n结尾的行),记录进一步拆分为字段(以FS分隔,默认为space)。
为了将返回的字符串赋值给一个数组,需要将shell的IFS设置为换行,或者将行逐一赋值给数组项(可以用NR过滤记录,这将要求您使用 AWK 多次读取该文件)。
您最好的做法是仅在 AWK 中打印记录并使用复合赋值将它们分配给 bash 数组,并将 IFS 设置为换行符
#/bin/bash
declare -a tab
IFS='
'
# Compount assignment: array=(words)
# Print record: { print } is the same as { print [=10=] }
# where [=10=] is the record and ... $N are the fields in the record
tab=($(awk '{ print }' file))
unset IFS
for index in ${!tab[@]}; do
echo "${index}: ${tab[index]}"
done
# Output:
# 0: Hi everyone I'm new
# 1: Can u help me please
# 2: to split this file
# 3: with awk ?
注意 awk
几乎不被使用,应该用简单的 cat
代替。