SED未将第一行添加到.csv文件

时间:2019-03-01 09:39:38

标签: bash awk sed

我正在为一个学校做一个项目,我的头撞过3堵墙,摔了几次。该项目将询问名称和颜色,并将其分别分配给变量,然后从/ tmp目录中的color变量创建目录。创建带有标题的.csv文件,从给定的.txt文件中无序提取信息,并仅添加选择列。我已经到了添加列的地步,但是无论我做什么,我都无法添加标题或从.txt文件导入信息。

如您所见,我已经尝试了多种方法来修改文件,但我还不知道该怎么做

输入文件格式如下

1. 734-44-2041 James SMITH jsmith@beltec.us 360-555-4778 360-555-0158

它应该看起来像

james,smith,james.smith@beltec.us,734-44-2041-000

我假设3个逗号的结尾应为0

这是我到目前为止的代码

#!/bin/bash
#interactive=

#variables 
color=/tmp/$color
csvfile=/tmp/blue/midterm.csv

if [ "$1" == "" ]; then
echo "you should use the -c or -C flags
exit
fi

#adding the -c flag and setting the filename variable 
while [ "$1" != "" ]; do 
case $1 in
-c | -C )   shift
        filename=$1
        ;;

* )     echo "you should use the -c flag"
        exit 1
esac
shift
done

#get user's name
echo "what is your name"
read user_name

#get fav color from user
echo "what is your favorate color"
read color

#make the fov color directory
if [ ! -f /tmp/$color ]; then
mkdir /tmp/$color
else
echo "bad luck $user_name"
exit 1
fi

#cd into the directory
cd /tmp/$color

#make a csv file in /temp/$color
touch midterm.csv

akw '
BEGIN { FS=OFS=","; print "Firstname","lastname","Maildomain","Password" }
{ print $2,$3,$4,$1 }
' "$filename" > "/tmp/$color/midterm.csv"

2 个答案:

答案 0 :(得分:1)

sed默认情况下将其结果输出到标准输出中。

如果您需要覆盖旧文件,请使用-i(或更好的-i.bak)将先前的文件版本保留在<filename>.bak

此外,如果仅在文件开头添加内容,请使用以下语法:

sed '1iYOUR_TEXT'

答案 1 :(得分:1)

使用awk时,您永远不需要sed。创建标头和内容所需要做的就是:

awk '
    BEGIN { FS=OFS=","; print "Firstname", "Lastname", "Maildomain", "Password" }
    { print $3, $4, $5, $2 }
' "$filename" > "/tmp/$color/midterm.csv"

或者如果您输入的文件不是CSV,因为更新的问题似乎不是这样的

awk '
    BEGIN { OFS=","; print "Firstname", "Lastname", "Maildomain", "Password" }
    { print $3, $4, $5, $2 }
' "$filename" > "/tmp/$color/midterm.csv"