linux - 拆分文件内容并存储到数组中或通过分隔符遍历文件内容

标签 linux bash awk ifs

我有下面的文件说 MemberFile.txt。其中包含由分隔符“#”分隔的记录,分隔符“#”从换行符开始并且是该行的单个字符。因此有 3 条记录。

3RECORDSFILE
#
[FIRSTNAME      ]   FirstName01
[MIDDLENAME     ]   MiddleName01
[LASTNAME       ]   LastName01
[ADDRESS       Q]   AddressOf #001 Pune
[ADDRESS       S]   AddressOf #001
#
[FIRSTNAME      ]   NameFirst02
[MIDDLENAME     ]   MiddleName02
[LASTNAME       ]   LastName02
[ADDRESS       Q]   AddressOf [002
[ADDRESS       N]   Addres Mumbai sOf [002
#
[FIRSTNAME      ]   03FirstName
[MIDDLENAME     ]   MiddleName03
[LASTNAME       ]   LastName03
[ADDRESS       Q]   Address Of 003]

我们如何使用 IFS 遍历记录而不 cat 整个文件。我尝试了以下内容但无济于事。看起来它是逐行读取的,而不是指定的 IFS。不知道哪里错了。

#!/bin/bash
while IFS='^#$' read r
do
echo $r
#do something more
done < MemberFile.txt

我尝试使用 awk 的其他选项。指定分隔符并存储到数组中。这也没有产生预期的结果。

arr=($(awk -F='^#$' '{print $1}' Member.txt))
for i in $arr
do
echo $I
#do something more
done

能否请您看一下并纠正我哪里出错了。我很熟悉这个 bash 脚本。我需要对每条记录再次执行一些操作。

最佳答案

使用此 gnu awk 将输入分解为由 #\n 分隔的记录:

awk -v RS='#\n' 'NR>1{print "==================", NR, "================"; print}' file
================== 2 ================
[FIRSTNAME      ]   FirstName01
[MIDDLENAME     ]   MiddleName01
[LASTNAME       ]   LastName01
[ADDRESS       Q]   AddressOf #001 Pune
[ADDRESS       S]   AddressOf #001

================== 3 ================
[FIRSTNAME      ]   NameFirst02
[MIDDLENAME     ]   MiddleName02
[LASTNAME       ]   LastName02
[ADDRESS       Q]   AddressOf [002
[ADDRESS       N]   Addres Mumbai sOf [002

================== 4 ================
[FIRSTNAME      ]   03FirstName
[MIDDLENAME     ]   MiddleName03
[LASTNAME       ]   LastName03
[ADDRESS       Q]   Address Of 003]

您可以对每条记录进行操作,例如使用以下 awk 命令打印所有 FIRSTNAME:

awk -v RS='#\n' 'NR>1{print $3}' file

FirstName01
NameFirst02
03FirstName

关于linux - 拆分文件内容并存储到数组中或通过分隔符遍历文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078273/

相关文章:

linux - 在Linux中使用内核模块捕获任务执行

macos - OS X bash For 循环只处理目录中的一个文件

awk - awk 输出中的额外空间

bash - 在 VS Code 中使用 Git Bash 终端 - 如何强制其在内部打开

linux - 使用 bash 解析 iwlist 扫描

regex - 未声明打印时将 AWK 代码行打印到我的输出文件

linux - 查找文件名中没有空格的文件

python - 为什么线程内的语句不起作用?

linux - 在 RedHat 上安装 MongoDB 时出现错误

linux - 真正从 Bash 中的列表中获取输入时