解析以空格分隔的文件并在bash中执行操作

时间:2017-09-19 20:05:52

标签: bash delimiter

我试图在bash中读取一个基本的,空格分隔的文件,我想对变量执行操作。

在bash中引用某些“列”的命名法是什么? 我试图明确使用bash。如果有有用的文档专门引用如何分隔文件和执行基本操作 - 这将非常有用。

我的文本文件的一个例子如下:

123456789 LastName FirstName 1 2 3
123456789 LastName FirstName 1 2 3
123456789 LastName FirstName 1 2 3
123456789 LastName FirstName 1 2 3
123456789 LastName FirstName 1 2 3

我想对它进行排序并对多个列执行操作。

我使用awk完成了这个,但我想在bash中这样做。 我的awk实现:

awk '{average = ($2 + $3 + $4)/3} {print (average, "["$1"]", $2",", $3); average = 0}' $'readme.txt'

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

您需要sortcut分别进行排序和拆分。

cut --delimiter=' ' --fields=LIST其中LIST是以逗号分隔的列索引列表,返回由LIST中的索引表示的每个空格分割线的部分。

sort --field-separator=' ' --keys=POS对文件行进行排序并将其输出到stdout。 --field-separator=' '导致位置由空格分隔。

  

POS是F [.C] [OPTS],其中F是字段编号,C是字段中的字符位置;两者都是原点1.如果-t和-b都不起作用,则字段中的字符从前一个空格的开头计算。 OPTS是一个或多个单字母排序选项,它覆盖该键的全局排序选项。如果没有给出密钥,请使用整行作为密钥。

您可以使用exprbc进行数学计算。

wc -l将为您提供总行数。

如果您有需要忽略的标题,请使用tail -n +2从第二行开始获取整个文件。

用管子和子壳将所有东西捆在一起。通常,您需要的处理类型是awk占有一席之地的原因。