file.txt的内容:
FROM: bob@gmail.com
TO: test@test.com
Hi Ana :)
带有结果的文件:
"16875170";"172";"50"
"11005137";"28";"39"
"16981017";"9347";"50"
"13771676";"13";"45"
"5865226";"963";"28"
答案 0 :(得分:6)
awk
可以很容易地为您完成此操作。
$ cat test.txt
"16875170";"172";"50"
"11005137";"28";"39"
"16981017";"9347";"50"
"13771676";"13";"45"
"5865226";"963";"28"
$ awk '{print "\""NR"\";"$0}' test.txt
"1";"16875170";"172";"50"
"2";"11005137";"28";"39"
"3";"16981017";"9347";"50"
"4";"13771676";"13";"45"
"5";"5865226";"963";"28"
这告诉awk打印一个文字"
,然后是记录编号,然后是";
,然后是该行的其余部分。根据未说明的其他需求(例如引用不是完全必要的),可能有更好的方法可供使用,但考虑到问题和输出,这是有效的。
用于测试的Grep解决方案:
$ grep ".*" test.txt -n | sed 's/\([0-9]*\):/"\1";/g;'
"1";"16875170";"172";"50"
"2";"11005137";"28";"39"
"3";"16981017";"9347";"50"
"4";"13771676";"13";"45"
"5";"5865226";"963";"28"
答案 1 :(得分:1)
为了sed的乐趣:
sed "=" test.txt | sed "N;s/\([0-9]\{1,\}\)\n/\"\1\";/"
输出:
"1";"16875170";"172";"50"
"2";"11005137";"28";"39"
"3";"16981017";"9347";"50"
"4";"13771676";"13";"45"
"5";"5865226";"963";"28"
答案 2 :(得分:0)
另外,基于bash:
i=0; cat my_file.txt | while read line; do i=$(( $i + 1 )); echo \"$i\"\;"$line"; done > results.txt
答案 3 :(得分:0)
还有coreutils nl
:
<file.txt nl -s';' -w1 | sed 's/[0-9]*/"&"/'
或perl
:
<file.txt perl -pne 's/^/"$.";/'
或sed
和paste
:
<file.txt sed = | paste -d\; - - | sed 's/[0-9]*/"&"/'
所有情况下的输出:
"1";"16875170";"172";"50"
"2";"11005137";"28";"39"
"3";"16981017";"9347";"50"
"4";"13771676";"13";"45"
"5";"5865226";"963";"28"