0

我有一个 .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 命令,但我实际上并没有真正掌握这个命令......也许有人有帮助的想法我有这个问题。

4

3 回答 3

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
于 2013-06-27T15:00:52.060 回答
0

完全在 awk 中:

awk 'BEGIN{FS=OFS=";"}{printf "prompt? ";getline info <"/dev/tty";print $1,$2,$3,info > "output"}'
于 2013-06-27T15:01:01.700 回答
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

例如:

$ > 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
于 2013-06-27T18:39:06.960 回答