如何读取文件并在每一行进行查询?

时间:2013-06-27 14:43:35

标签: awk cat

我有一个.csv文件,想要添加信息。分隔符是; 。
我有一个想法,但它没有真正起作用。那是:

    cat file.csv | awk -F ";" '{ print ""$1" "$2" "$3 }' > temp.csv    
    cat temp.csv | while read info1 info2 info3
    do
         read -p 'Give another information :  " INFO
         echo "$info1 ; $info2 ; $info3 ; INFO" >> new_file.csv
    done

除了“while”中的“read -p”外,一切正常... 我想知道我是否应该只尝试使用awk命令,但实际上我并没有真正掌握这个命令....也许有人有一个想法来帮助我解决这个问题。

3 个答案:

答案 0 :(得分:1)

awk '
BEGIN{FS=OFS=";"}
{printf "Enter new stuff for line : " $0 "\n"; 
getline newstuff < "-"; 
print $0,newstuff > "newfile" }' file

测试:

$ cat file
this;is;my;line;one
this;is;my;line;two
this;is;my;line;three

$ awk 'BEGIN{FS=OFS=";"}{printf "Enter new stuff for line : " $0 "\n"; getline newstuff < "-"; print $0,newstuff > "newfile" }' file
Enter new stuff for line : this;is;my;line;one
hola
Enter new stuff for line : this;is;my;line;two
hello
Enter new stuff for line : this;is;my;line;three
bonjour

$ cat newfile
this;is;my;line;one;hola
this;is;my;line;two;hello
this;is;my;line;three;bonjour

答案 1 :(得分:0)

完全在awk中:

awk 'BEGIN{FS=OFS=";"}{printf "prompt? ";getline info <"/dev/tty";print $1,$2,$3,info > "output"}'

答案 2 :(得分:0)

不要试图在awk中完成所有操作,因为像这样的解决方案容易出错和/或不必要的复杂。

试试这个bash脚本:

> new_file
exec 3<file
while IFS=';' read -r f1 f2 f3 rest
do
        read -p "other info? " info <&1
        echo "$f1;$f2;$f3;$info" >> new_file
done <&3

e.g:

$ > new_file
exec 3<file
while IFS=';' read -r f1 f2 f3 rest
do
        read -p "other info? " info <&1
        echo "$f1;$f2;$f3;$info" >> new_file
done <&3
other info? line 1
other info? line 2
other info? line 3

$ cat file
1;2;3;4
5;6;7;8
9;10;11;1

$ cat new_file
1;2;3;line 1
5;6;7;line 2
9;10;11;line 3