更改 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 代替。