我有下面的文件说 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/