如何解析多行文件并对bash中的每个标记行进行一些操作?

Posted

技术标签:

【中文标题】如何解析多行文件并对bash中的每个标记行进行一些操作?【英文标题】:How to parse multiline file and do some operation for each token line in bash? 【发布时间】:2013-06-11 00:13:03 【问题描述】:

假设我们有一个 tsv 文件

1    2    3
1    2    3

我们想为每个 tsv 文件行做一些操作,比如 echo $1 $2 $3

如何在 bash 中做这样的事情?

【问题讨论】:

【参考方案1】:

这样就可以了:

while read -r a b c
do
   echo "first = $a second = $b third = $c"
done < file

测试

$ while read -r a b c; do echo "first=$a second=$b third=$c"; done < file
first=1 second=2 third=3
first=1 second=2 third=3

由于分隔符是一个制表符,您不需要使用IFS。例如,如果它是 |,您可以这样做:

$ cat file
1|2|3
1|2|3
$ while IFS='|' read -r a b c; do echo "first=$a second=$b third=$c"; done < file
first=1 second=2 third=3
first=1 second=2 third=3

【讨论】:

你可能应该设置 IFS 以防数据可能包含空格。 好吧,如果它包含空格,那么它们将被视为不同的参数。

以上是关于如何解析多行文件并对bash中的每个标记行进行一些操作?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 bash 脚本中用多行/流替换单个流/行?

Bash:将行拆分为多行[重复]

循环目录并对 bash 脚本中的文件进行操作

合并R中的多行

对具有多行表格单元格的表格中的多行使用标签标记

如何读取多行 fwf 格式,其中行可能流或不流多行