如何使用unix shell读取后解析一行

时间:2017-11-21 05:39:55

标签: shell unix string-parsing

第一行的csv文件有头文件。我需要读取第一行然后解析它以查看它是否具有我正在寻找的元素。 第一行有4个元素。 1. HDR 2.今天的日期3.从日期4.到目前为止。

这是我用来获取第一行的代码。

read -r header < "1" -- this game me the first row into header variable. 

我尝试读取此'header'变量以进一步拆分该行。

read f1 f2 f3 < “$header”
        echo "OS is     : $f1"
        echo "Company is: $f2"
        echo "Value is  : $f3"

我没有显示任何值。我认为原因可能是'标题'不是以字符串形式出现的。

我是unix shell脚本的新手。请帮忙。

1 个答案:

答案 0 :(得分:0)

read -r header < "1" 

没有。您正在读取名为1的文件(可能不存在,因此read失败),因为<用于redirection。尝试在终端中键入该命令,您将收到错误(“没有此类文件或目录”)。

read f1 f2 f3 < “$header”

这是错误的。如果header shell变量包含1 2 3,则您正在读取名为1 2 3的文件(内部有两个空格的六字符文件路径),因为<用于{{3} }}

考虑使用redirection来处理由包含多个列的行组成的文件。

在调试阶段考虑使用#!/bin/bash -vx启动(可执行)shell脚本(以获取跟踪)。花几个小时阅读一些awk,然后阅读shell scripting tutorial

请务必了解shell bash reference manual,特别是work。请注意,每个程序(例如由某些shell启动)都是由globbing启动的(在某些execve(2)中完成,例如您的shell进程)。

BTW,在read f1 f2 f3 < “$header”之前你可以(暂时)添加调试输出,例如

 echo "header=" "$header" > /dev/stderr
在shell脚本中

,了解发生了什么。

(你真的应该花费来阅读更多有关贝壳的内容)