在bash中读取文件时忽略第一行/列标题

时间:2015-08-10 03:20:00

标签: bash sed

我正在尝试从bash中的源txt文件中读取并且我想忽略第一行是列。在搜索一个解决方案后,使用“sed”和我的while循环如下:

#!/bin/bash
filename="source2.txt"
#fp=`sed 1d source2.txt`
#echo $fp
sed 1d $filename | while IFS=, read -r accountId ProductId Product
do 
echo "Account $accountId has productId $ProductId and product $Product"
done < $filename

但是sed命令似乎不起作用。保持向header提供所有内容。我尝试将双引号添加到1d以及$ filename但不起作用。

这是我的示例输入文件内容

AccountId ProductId Product
300100051205280,300100051161910,content1
300100051199355,300100051161876,content2

我正在使用Editra编辑器来创建我的bash脚本。任何人都可以帮助我,为什么这不起作用。谢谢你提前帮助。

1 个答案:

答案 0 :(得分:13)

在复合命令中使用额外的read。这比使用单独的进程跳过第一行更有效,并防止while循环在子shell中运行(如果你尝试在循环体中设置任何变量,这可能很重要。)

{
    read
    while IFS=, read -r accountId ProductId Product
    do 
        echo "Account $accountId has productId $ProductId and product $Product"
    done
} < $filename

-

原始尝试的问题在于您为while循环提供了两个输入源(通过来自sed的管道,并通过输入减少)。删除输入重定向将解决这个问题。

sed 1d $filename | while IFS=, read -r accountId ProductId Product
do 
    echo "Account $accountId has productId $ProductId and product $Product"
done